60806040523480156200001157600080fd5b506040516200529638038062005296833981810160405281019062000037919062000466565b838381600390816200004a919062000757565b5080600490816200005c919062000757565b50505033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000b28183620000bc60201b60201c565b5050505062000959565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200012e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000125906200089f565b60405180910390fd5b62000142600083836200022960201b60201c565b8060026000828254620001569190620008f0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200020991906200093c565b60405180910390a362000225600083836200022e60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200029c8262000251565b810181811067ffffffffffffffff82111715620002be57620002bd62000262565b5b80604052505050565b6000620002d362000233565b9050620002e1828262000291565b919050565b600067ffffffffffffffff82111562000304576200030362000262565b5b6200030f8262000251565b9050602081019050919050565b60005b838110156200033c5780820151818401526020810190506200031f565b60008484015250505050565b60006200035f6200035984620002e6565b620002c7565b9050828152602081018484840111156200037e576200037d6200024c565b5b6200038b8482856200031c565b509392505050565b600082601f830112620003ab57620003aa62000247565b5b8151620003bd84826020860162000348565b91505092915050565b6000819050919050565b620003db81620003c6565b8114620003e757600080fd5b50565b600081519050620003fb81620003d0565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200042e8262000401565b9050919050565b620004408162000421565b81146200044c57600080fd5b50565b600081519050620004608162000435565b92915050565b600080600080608085870312156200048357620004826200023d565b5b600085015167ffffffffffffffff811115620004a457620004a362000242565b5b620004b28782880162000393565b945050602085015167ffffffffffffffff811115620004d657620004d562000242565b5b620004e48782880162000393565b9350506040620004f787828801620003ea565b92505060606200050a878288016200044f565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200056957607f821691505b6020821081036200057f576200057e62000521565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005aa565b620005f58683620005aa565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000638620006326200062c84620003c6565b6200060d565b620003c6565b9050919050565b6000819050919050565b620006548362000617565b6200066c62000663826200063f565b848454620005b7565b825550505050565b600090565b6200068362000674565b6200069081848462000649565b505050565b5b81811015620006b857620006ac60008262000679565b60018101905062000696565b5050565b601f8211156200070757620006d18162000585565b620006dc846200059a565b81016020851015620006ec578190505b62000704620006fb856200059a565b83018262000695565b50505b505050565b600082821c905092915050565b60006200072c600019846008026200070c565b1980831691505092915050565b600062000747838362000719565b9150826002028217905092915050565b620007628262000516565b67ffffffffffffffff8111156200077e576200077d62000262565b5b6200078a825462000550565b62000797828285620006bc565b600060209050601f831160018114620007cf5760008415620007ba578287015190505b620007c6858262000739565b86555062000836565b601f198416620007df8662000585565b60005b828110156200080957848901518255600182019150602085019450602081019050620007e2565b8683101562000829578489015162000825601f89168262000719565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000887601f836200083e565b915062000894826200084f565b602082019050919050565b60006020820190508181036000830152620008ba8162000878565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008fd82620003c6565b91506200090a83620003c6565b9250828201905080821115620009255762000924620008c1565b5b92915050565b6200093681620003c6565b82525050565b60006020820190506200095360008301846200092b565b92915050565b61492d80620009696000396000f3fe6080604052600436106102085760003560e01c806373717b0811610118578063b7f494a4116100a0578063cb8f888b1161006f578063cb8f888b146107d1578063dd62ed3e146107fa578063e47ad74d14610837578063f52a919814610860578063f7194138146108a05761020f565b8063b7f494a414610728578063bb0b983014610751578063c05a0db91461077c578063c60853f6146107a85761020f565b806395d89b41116100e757806395d89b4114610631578063a457c2d71461065c578063a9059cbb14610699578063b29a8140146106d6578063b479a961146106ff5761020f565b806373717b081461057257806379cc67901461059d578063853c75d8146105c657806392ae12fd146105f15761020f565b80632ee02d7c1161019b5780633f937aae1161016a5780633f937aae1461047d57806342966c68146104ba578063559b2f65146104e35780635f46e7401461050c57806370a08231146105355761020f565b80632ee02d7c146103c35780632f820a5f146103ec578063313ce5671461041557806339509351146104405761020f565b806320bfe342116101d757806320bfe342146102cf57806321d930901461030c57806323b872dd146103495780632972b0f0146103865761020f565b806306fdde0314610211578063095ea7b31461023c5780630d0298021461027957806318160ddd146102a45761020f565b3661020f57005b005b34801561021d57600080fd5b506102266108c9565b604051610233919061303a565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e91906130fa565b61095b565b6040516102709190613155565b60405180910390f35b34801561028557600080fd5b5061028e61097e565b60405161029b91906131cf565b60405180910390f35b3480156102b057600080fd5b506102b96109a4565b6040516102c691906131f9565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906130fa565b6109ae565b6040516103039190613155565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190613214565b610a2d565b60405161034091906131f9565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190613241565b610a51565b60405161037d9190613155565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a891906130fa565b610a80565b6040516103ba9190613155565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e591906133a5565b610a94565b005b3480156103f857600080fd5b50610413600480360381019061040e919061346e565b610cac565b005b34801561042157600080fd5b5061042a610dd1565b60405161043791906134dd565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906130fa565b610dda565b6040516104749190613155565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613214565b610e11565b6040516104b19190613507565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190613214565b610e50565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190613522565b610e64565b005b34801561051857600080fd5b50610533600480360381019061052e91906135a5565b610f71565b005b34801561054157600080fd5b5061055c60048036038101906105579190613522565b611113565b60405161056991906131f9565b60405180910390f35b34801561057e57600080fd5b5061058761115b565b6040516105949190613675565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf91906130fa565b611181565b005b3480156105d257600080fd5b506105db6111a1565b6040516105e89190613507565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613214565b6111c7565b6040516106289493929190613702565b60405180910390f35b34801561063d57600080fd5b506106466112ba565b604051610653919061303a565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e91906130fa565b61134c565b6040516106909190613155565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb91906130fa565b6113c3565b6040516106cd9190613155565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f891906130fa565b6113e6565b005b34801561070b57600080fd5b5061072660048036038101906107219190613214565b6115b5565b005b34801561073457600080fd5b5061074f600480360381019061074a91906137a4565b61170e565b005b34801561075d57600080fd5b50610766611962565b604051610773919061388e565b60405180910390f35b34801561078857600080fd5b50610791611988565b60405161079f929190613a25565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190613522565b611a71565b005b3480156107dd57600080fd5b506107f860048036038101906107f391906133a5565b611bca565b005b34801561080657600080fd5b50610821600480360381019061081c9190613a5c565b611d60565b60405161082e91906131f9565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190613214565b611de7565b005b34801561086c57600080fd5b5061088760048036038101906108829190613ad8565b611f40565b6040516108979493929190613702565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190613522565b612040565b005b6060600380546108d890613b47565b80601f016020809104026020016040519081016040528092919081815260200182805461090490613b47565b80156109515780601f1061092657610100808354040283529160200191610951565b820191906000526020600020905b81548152906001019060200180831161093457829003601f168201915b5050505050905090565b600080610966612114565b905061097381858561211c565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006009600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a225760019050610a27565b600090505b92915050565b600b8181548110610a3d57600080fd5b906000526020600020016000915090505481565b600080610a5c612114565b9050610a698582856122e5565b610a74858585612371565b60019150509392505050565b6000610a8c83836109ae565b905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90613bc4565b60405180910390fd5b600086869050905060005b81811015610c9857838382818110610b4a57610b49613be4565b5b9050602002016020810190610b5f9190613c3f565b600960008a8a85818110610b7657610b75613be4565b5b90506020020135815260200190815260200160002060020160006101000a81548161ffff021916908361ffff160217905550858582818110610bbb57610bba613be4565b5b9050602002016020810190610bd09190613522565b600960008a8a85818110610be757610be6613be4565b5b90506020020135815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008a8a85818110610c5657610c55613be4565b5b90506020020135815260200190815260200160002060020160026101000a81548160ff0219169083151502179055508080610c9090613c9b565b915050610b2f565b50610ca2886125e7565b5050505050505050565b82600073ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990613d55565b60405180910390fd5b610d5c3383612a4c565b6000610d89858585604051602001610d75929190613d75565b604051602081830303815290604052612c19565b90507f1d332bb9a27d944c53ab15e2cb32556cca6f14fcafcd64c60c158041180dfd958582338787604051610dc2959493929190613d9e565b60405180910390a15050505050565b60006012905090565b600080610de5612114565b9050610e06818585610df78589611d60565b610e019190613df1565b61211c565b600191505092915050565b600c8181548110610e2157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e61610e5b612114565b82612a4c565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb90613bc4565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe1a25f463c6504824e91268b5b2c05658d5358c9c1698a85346cfae5336a642e3382604051610f66929190613e25565b60405180910390a150565b8486600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa90613bc4565b60405180910390fd5b6009600082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90613bc4565b60405180910390fd5b60008085858101906110b99190613e8c565b915091506110c78282612e4a565b7f5d31662a192555f9228e6ee24af8162ea960ad5de0408442e365f97e0172e8e88a8c8b85856040516110fe959493929190613d9e565b60405180910390a15050505050505050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111938261118d612114565b836122e5565b61119d8282612a4c565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461121090613b47565b80601f016020809104026020016040519081016040528092919081815260200182805461123c90613b47565b80156112895780601f1061125e57610100808354040283529160200191611289565b820191906000526020600020905b81548152906001019060200180831161126c57829003601f168201915b5050505050908060020160009054906101000a900461ffff16908060020160029054906101000a900460ff16905084565b6060600480546112c990613b47565b80601f01602080910402602001604051908101604052809291908181526020018280546112f590613b47565b80156113425780601f1061131757610100808354040283529160200191611342565b820191906000526020600020905b81548152906001019060200180831161132557829003601f168201915b5050505050905090565b600080611357612114565b905060006113658286611d60565b9050838110156113aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a190613f3e565b60405180910390fd5b6113b7828686840361211c565b60019250505092915050565b6000806113ce612114565b90506113db818585612371565b600191505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d90613bc4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114f6573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114f0573d6000803e3d6000fd5b50611576565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611531929190613d75565b6020604051808303816000875af1158015611550573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115749190613f8a565b505b7f16a1412f01b73c390eb2548427101644aa86c1443c272f73df00fb74c48fe4993383836040516115a993929190613fb7565b60405180910390a15050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c90613bc4565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b479a961826040518263ffffffff1660e01b81526004016116a091906131f9565b600060405180830381600087803b1580156116ba57600080fd5b505af11580156116ce573d6000803e3d6000fd5b505050507f7b6bdf5a54b984bdb41e777eb126123085d57633ab56d408d9a1d39dd894e7bb3382604051611703929190613d75565b60405180910390a150565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590613bc4565b60405180910390fd5b600086869050905060005b8181101561194e578383828181106117c4576117c3613be4565b5b90506020020160208101906117d99190613c3f565b600960008a8a858181106117f0576117ef613be4565b5b90506020020135815260200190815260200160002060020160006101000a81548161ffff021916908361ffff16021790555085858281811061183557611834613be4565b5b90506020028101906118479190613ffd565b600960008b8b8681811061185e5761185d613be4565b5b905060200201358152602001908152602001600020600101918261188392919061423c565b506001600960008a8a8581811061189d5761189c613be4565b5b90506020020135815260200190815260200160002060020160026101000a81548160ff0219169083151502179055506001600960008a8a858181106118e5576118e4613be4565b5b90506020020135815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808061194690613c9b565b9150506117a9565b50611958886125e7565b5050505050505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606080600b600c818054806020026020016040519081016040528092919081815260200182805480156119da57602002820191906000526020600020905b8154815260200190600101908083116119c6575b5050505050915080805480602002602001604051908101604052809291908181526020018280548015611a6257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611a18575b50505050509050915091509091565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af890613bc4565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c60853f6826040518263ffffffff1660e01b8152600401611b5c9190613507565b600060405180830381600087803b158015611b7657600080fd5b505af1158015611b8a573d6000803e3d6000fd5b505050507f3785abad972484d82ebc033d8eb190737cd209b24e7f853dd622e415c3f537a23382604051611bbf929190613e25565b60405180910390a150565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5190613bc4565b60405180910390fd5b611c6987878787878787610a94565b60005b86869050811015611d5657600b878783818110611c8c57611c8b613be4565b5b905060200201359080600181540180825580915050600190039060005260206000200160009091909190915055600c858583818110611cce57611ccd613be4565b5b9050602002016020810190611ce39190613522565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080611d4e90613c9b565b915050611c6c565b5050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e90613bc4565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e47ad74d826040518263ffffffff1660e01b8152600401611ed291906131f9565b600060405180830381600087803b158015611eec57600080fd5b505af1158015611f00573d6000803e3d6000fd5b505050507f83f76efc0c025b2e3779f7bcead5a89ddaf05dc7829157cdab021a8591e7a6f93382604051611f35929190613d75565b60405180910390a150565b6008602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054611f9690613b47565b80601f0160208091040260200160405190810160405280929190818152602001828054611fc290613b47565b801561200f5780601f10611fe45761010080835404028352916020019161200f565b820191906000526020600020905b815481529060010190602001808311611ff257829003601f168201915b5050505050908060020160009054906101000a900461ffff16908060020160029054906101000a900460ff16905084565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c790613bc4565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361218b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121829061437e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190614410565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122d891906131f9565b60405180910390a3505050565b60006122f18484611d60565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461236b578181101561235d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123549061447c565b60405180910390fd5b61236a848484840361211c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d79061450e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612446906145a0565b60405180910390fd5b61245a838383612fa0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d790614632565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125ce91906131f9565b60405180910390a36125e1848484612fa5565b50505050565b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663647846a56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b99190614667565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283357600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016127ee929190613d75565b6020604051808303816000875af115801561280d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128319190613f8a565b505b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128dc9190614667565b73ffffffffffffffffffffffffffffffffffffffff1614612a4957600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129889190614667565b73ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612a04929190613d75565b6020604051808303816000875af1158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a479190613f8a565b505b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab290614706565b60405180910390fd5b612ac782600083612fa0565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4490614798565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c0091906131f9565b60405180910390a3612c1483600084612fa5565b505050565b600080600960008581526020019081526020016000206040518060800160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054612ca090613b47565b80601f0160208091040260200160405190810160405280929190818152602001828054612ccc90613b47565b8015612d195780601f10612cee57610100808354040283529160200191612d19565b820191906000526020600020905b815481529060010190602001808311612cfc57829003601f168201915b505050505081526020016002820160009054906101000a900461ffff1661ffff1661ffff1681526020016002820160029054906101000a900460ff1615151515815250509050806060015115612d9257828160200151604051602001612d809291906147b8565b60405160208183030381529060405292505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdadc90c82600001518686856040015160006040518663ffffffff1660e01b8152600401612dfe9594939291906147ef565b6020604051808303816000875af1158015612e1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e41919061485e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb0906148d7565b60405180910390fd5b612ec560008383612fa0565b8060026000828254612ed79190613df1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f8891906131f9565b60405180910390a3612f9c60008383612fa5565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fe4578082015181840152602081019050612fc9565b60008484015250505050565b6000601f19601f8301169050919050565b600061300c82612faa565b6130168185612fb5565b9350613026818560208601612fc6565b61302f81612ff0565b840191505092915050565b600060208201905081810360008301526130548184613001565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061309182613066565b9050919050565b6130a181613086565b81146130ac57600080fd5b50565b6000813590506130be81613098565b92915050565b6000819050919050565b6130d7816130c4565b81146130e257600080fd5b50565b6000813590506130f4816130ce565b92915050565b600080604083850312156131115761311061305c565b5b600061311f858286016130af565b9250506020613130858286016130e5565b9150509250929050565b60008115159050919050565b61314f8161313a565b82525050565b600060208201905061316a6000830184613146565b92915050565b6000819050919050565b600061319561319061318b84613066565b613170565b613066565b9050919050565b60006131a78261317a565b9050919050565b60006131b98261319c565b9050919050565b6131c9816131ae565b82525050565b60006020820190506131e460008301846131c0565b92915050565b6131f3816130c4565b82525050565b600060208201905061320e60008301846131ea565b92915050565b60006020828403121561322a5761322961305c565b5b6000613238848285016130e5565b91505092915050565b60008060006060848603121561325a5761325961305c565b5b6000613268868287016130af565b9350506020613279868287016130af565b925050604061328a868287016130e5565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126132b9576132b8613294565b5b8235905067ffffffffffffffff8111156132d6576132d5613299565b5b6020830191508360208202830111156132f2576132f161329e565b5b9250929050565b60008083601f84011261330f5761330e613294565b5b8235905067ffffffffffffffff81111561332c5761332b613299565b5b6020830191508360208202830111156133485761334761329e565b5b9250929050565b60008083601f84011261336557613364613294565b5b8235905067ffffffffffffffff81111561338257613381613299565b5b60208301915083602082028301111561339e5761339d61329e565b5b9250929050565b60008060008060008060006080888a0312156133c4576133c361305c565b5b60006133d28a828b016130af565b975050602088013567ffffffffffffffff8111156133f3576133f2613061565b5b6133ff8a828b016132a3565b9650965050604088013567ffffffffffffffff81111561342257613421613061565b5b61342e8a828b016132f9565b9450945050606088013567ffffffffffffffff81111561345157613450613061565b5b61345d8a828b0161334f565b925092505092959891949750929550565b6000806000606084860312156134875761348661305c565b5b6000613495868287016130e5565b93505060206134a6868287016130af565b92505060406134b7868287016130e5565b9150509250925092565b600060ff82169050919050565b6134d7816134c1565b82525050565b60006020820190506134f260008301846134ce565b92915050565b61350181613086565b82525050565b600060208201905061351c60008301846134f8565b92915050565b6000602082840312156135385761353761305c565b5b6000613546848285016130af565b91505092915050565b60008083601f84011261356557613564613294565b5b8235905067ffffffffffffffff81111561358257613581613299565b5b60208301915083600182028301111561359e5761359d61329e565b5b9250929050565b600080600080600080600060c0888a0312156135c4576135c361305c565b5b60006135d28a828b016130e5565b97505060206135e38a828b016130e5565b96505060406135f48a828b016130af565b95505060606136058a828b016130af565b94505060806136168a828b016130e5565b93505060a088013567ffffffffffffffff81111561363757613636613061565b5b6136438a828b0161354f565b925092505092959891949750929550565b600061365f8261319c565b9050919050565b61366f81613654565b82525050565b600060208201905061368a6000830184613666565b92915050565b600081519050919050565b600082825260208201905092915050565b60006136b782613690565b6136c1818561369b565b93506136d1818560208601612fc6565b6136da81612ff0565b840191505092915050565b600061ffff82169050919050565b6136fc816136e5565b82525050565b600060808201905061371760008301876134f8565b818103602083015261372981866136ac565b905061373860408301856136f3565b6137456060830184613146565b95945050505050565b60008083601f84011261376457613763613294565b5b8235905067ffffffffffffffff81111561378157613780613299565b5b60208301915083602082028301111561379d5761379c61329e565b5b9250929050565b60008060008060008060006080888a0312156137c3576137c261305c565b5b60006137d18a828b016130af565b975050602088013567ffffffffffffffff8111156137f2576137f1613061565b5b6137fe8a828b016132a3565b9650965050604088013567ffffffffffffffff81111561382157613820613061565b5b61382d8a828b0161374e565b9450945050606088013567ffffffffffffffff8111156138505761384f613061565b5b61385c8a828b0161334f565b925092505092959891949750929550565b60006138788261319c565b9050919050565b6138888161386d565b82525050565b60006020820190506138a3600083018461387f565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138de816130c4565b82525050565b60006138f083836138d5565b60208301905092915050565b6000602082019050919050565b6000613914826138a9565b61391e81856138b4565b9350613929836138c5565b8060005b8381101561395a57815161394188826138e4565b975061394c836138fc565b92505060018101905061392d565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61399c81613086565b82525050565b60006139ae8383613993565b60208301905092915050565b6000602082019050919050565b60006139d282613967565b6139dc8185613972565b93506139e783613983565b8060005b83811015613a185781516139ff88826139a2565b9750613a0a836139ba565b9250506001810190506139eb565b5085935050505092915050565b60006040820190508181036000830152613a3f8185613909565b90508181036020830152613a5381846139c7565b90509392505050565b60008060408385031215613a7357613a7261305c565b5b6000613a81858286016130af565b9250506020613a92858286016130af565b9150509250929050565b600063ffffffff82169050919050565b613ab581613a9c565b8114613ac057600080fd5b50565b600081359050613ad281613aac565b92915050565b60008060408385031215613aef57613aee61305c565b5b6000613afd858286016130e5565b9250506020613b0e85828601613ac3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b5f57607f821691505b602082108103613b7257613b71613b18565b5b50919050565b7f4d657373616765436c69656e743a206e6f7420617574686f72697a6564000000600082015250565b6000613bae601d83612fb5565b9150613bb982613b78565b602082019050919050565b60006020820190508181036000830152613bdd81613ba1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b613c1c816136e5565b8114613c2757600080fd5b50565b600081359050613c3981613c13565b92915050565b600060208284031215613c5557613c5461305c565b5b6000613c6384828501613c2a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ca6826130c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cd857613cd7613c6c565b5b600182019050919050565b7f4d657373616765436c69656e743a2064657374696e6174696f6e20636861696e60008201527f206e6f7420616374697665000000000000000000000000000000000000000000602082015250565b6000613d3f602b83612fb5565b9150613d4a82613ce3565b604082019050919050565b60006020820190508181036000830152613d6e81613d32565b9050919050565b6000604082019050613d8a60008301856134f8565b613d9760208301846131ea565b9392505050565b600060a082019050613db360008301886131ea565b613dc060208301876131ea565b613dcd60408301866134f8565b613dda60608301856134f8565b613de760808301846131ea565b9695505050505050565b6000613dfc826130c4565b9150613e07836130c4565b9250828201905080821115613e1f57613e1e613c6c565b5b92915050565b6000604082019050613e3a60008301856134f8565b613e4760208301846134f8565b9392505050565b6000613e5982613066565b9050919050565b613e6981613e4e565b8114613e7457600080fd5b50565b600081359050613e8681613e60565b92915050565b60008060408385031215613ea357613ea261305c565b5b6000613eb185828601613e77565b9250506020613ec2858286016130e5565b9150509250929050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f28602583612fb5565b9150613f3382613ecc565b604082019050919050565b60006020820190508181036000830152613f5781613f1b565b9050919050565b613f678161313a565b8114613f7257600080fd5b50565b600081519050613f8481613f5e565b92915050565b600060208284031215613fa057613f9f61305c565b5b6000613fae84828501613f75565b91505092915050565b6000606082019050613fcc60008301866134f8565b613fd960208301856134f8565b613fe660408301846131ea565b949350505050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261401a57614019613fee565b5b80840192508235915067ffffffffffffffff82111561403c5761403b613ff3565b5b60208301925060018202360383131561405857614057613ff8565b5b509250929050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826140bf565b61410686836140bf565b95508019841693508086168417925050509392505050565b600061413961413461412f846130c4565b613170565b6130c4565b9050919050565b6000819050919050565b6141538361411e565b61416761415f82614140565b8484546140cc565b825550505050565b600090565b61417c61416f565b61418781848461414a565b505050565b5b818110156141ab576141a0600082614174565b60018101905061418d565b5050565b601f8211156141f0576141c18161409a565b6141ca846140af565b810160208510156141d9578190505b6141ed6141e5856140af565b83018261418c565b50505b505050565b600082821c905092915050565b6000614213600019846008026141f5565b1980831691505092915050565b600061422c8383614202565b9150826002028217905092915050565b6142468383614060565b67ffffffffffffffff81111561425f5761425e61406b565b5b6142698254613b47565b6142748282856141af565b6000601f8311600181146142a35760008415614291578287013590505b61429b8582614220565b865550614303565b601f1984166142b18661409a565b60005b828110156142d9578489013582556001820191506020850194506020810190506142b4565b868310156142f657848901356142f2601f891682614202565b8355505b6001600288020188555050505b50505050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614368602483612fb5565b91506143738261430c565b604082019050919050565b600060208201905081810360008301526143978161435b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143fa602283612fb5565b91506144058261439e565b604082019050919050565b60006020820190508181036000830152614429816143ed565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614466601d83612fb5565b915061447182614430565b602082019050919050565b6000602082019050818103600083015261449581614459565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144f8602583612fb5565b91506145038261449c565b604082019050919050565b60006020820190508181036000830152614527816144eb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061458a602383612fb5565b91506145958261452e565b604082019050919050565b600060208201905081810360008301526145b98161457d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061461c602683612fb5565b9150614627826145c0565b604082019050919050565b6000602082019050818103600083015261464b8161460f565b9050919050565b60008151905061466181613098565b92915050565b60006020828403121561467d5761467c61305c565b5b600061468b84828501614652565b91505092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006146f0602183612fb5565b91506146fb82614694565b604082019050919050565b6000602082019050818103600083015261471f816146e3565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614782602283612fb5565b915061478d82614726565b604082019050919050565b600060208201905081810360008301526147b181614775565b9050919050565b600060408201905081810360008301526147d281856136ac565b905081810360208301526147e681846136ac565b90509392505050565b600060a08201905061480460008301886134f8565b61481160208301876131ea565b818103604083015261482381866136ac565b905061483260608301856136f3565b61483f6080830184613146565b9695505050505050565b600081519050614858816130ce565b92915050565b6000602082840312156148745761487361305c565b5b600061488284828501614849565b91505092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006148c1601f83612fb5565b91506148cc8261488b565b602082019050919050565b600060208201905081810360008301526148f0816148b4565b905091905056fea2646970667358221220d0d7630d21b8f2d8c41d7e3cedde4b57b648f37d67aa2b5d96189d05b9fd0c0864736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e28a4a009c93ff1250e1899759a45d2febaba60000000000000000000000000000000000000000000000000000000000000000f417262697472756d20546573742031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034154310000000000000000000000000000000000000000000000000000000000