60806040523480156200001157600080fd5b506040518060400160405280600781526020017f59414348544945000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f435943000000000000000000000000000000000000000000000000000000000081525081600090816200008f919062000c5d565b508060019081620000a1919062000c5d565b505050620000c4620000b86200022f60201b60201c565b6200023760201b60201c565b600060088190555066354a6ba7a180006009819055506000600b8190555060405180606001604052806036815260200162004d6560369139600a90816200010c919062000c5d565b5060005b60328110156200022857600062000133600c620002fd60201b620013801760201c565b9050610d0481106200017c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001739062000da5565b60405180910390fd5b62000193600c6200030b60201b6200138e1760201c565b620001a533826200032160201b60201c565b6200021181600a620001c2846200034760201b620013a41760201c565b604051602001620001d4919062000e85565b604051602081830303815290604052604051602001620001f692919062000f3a565b604051602081830303815290604052620004c060201b60201c565b5080806200021f9062000f91565b91505062000110565b50620014e2565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b6001816000016000828254019250508190555050565b620003438282604051806020016040528060008152506200053a60201b60201c565b5050565b60606000820362000390576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050620004bb565b600082905060005b60008214620003c8578080620003ae9062000f91565b915050600a82620003c091906200100d565b915062000398565b60008167ffffffffffffffff811115620003e757620003e6620009ee565b5b6040519080825280601f01601f1916602001820160405280156200041a5781602001600182028036833780820191505090505b5090505b60008514620004b45760018262000436919062001045565b9150600a8562000447919062001080565b6030620004559190620010b8565b60f81b8183815181106200046e576200046d620010f3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85620004ac91906200100d565b94506200041e565b8093505050505b919050565b620004d182620005a860201b60201c565b62000513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200050a9062001198565b60405180910390fd5b8060066000848152602001908152602001600020908162000535919062000c5d565b505050565b6200054c83836200061460201b60201c565b6200056160008484846200080d60201b60201c565b620005a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200059a9062001230565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000686576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200067d90620012a2565b60405180910390fd5b6200069781620005a860201b60201c565b15620006da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d19062001314565b60405180910390fd5b620006ee60008383620009b660201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007409190620010b8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200080960008383620009bb60201b60201c565b5050565b60006200083b8473ffffffffffffffffffffffffffffffffffffffff16620009c060201b620015041760201c565b15620009a9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200086d6200022f60201b60201c565b8786866040518563ffffffff1660e01b8152600401620008919493929190620013fa565b6020604051808303816000875af1925050508015620008d057506040513d601f19601f82011682018060405250810190620008cd9190620014b0565b60015b62000958573d806000811462000903576040519150601f19603f3d011682016040523d82523d6000602084013e62000908565b606091505b50600081510362000950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009479062001230565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620009ae565b600190505b949350505050565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a6557607f821691505b60208210810362000a7b5762000a7a62000a1d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ae57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aa6565b62000af1868362000aa6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b3e62000b3862000b328462000b09565b62000b13565b62000b09565b9050919050565b6000819050919050565b62000b5a8362000b1d565b62000b7262000b698262000b45565b84845462000ab3565b825550505050565b600090565b62000b8962000b7a565b62000b9681848462000b4f565b505050565b5b8181101562000bbe5762000bb260008262000b7f565b60018101905062000b9c565b5050565b601f82111562000c0d5762000bd78162000a81565b62000be28462000a96565b8101602085101562000bf2578190505b62000c0a62000c018562000a96565b83018262000b9b565b50505b505050565b600082821c905092915050565b600062000c326000198460080262000c12565b1980831691505092915050565b600062000c4d838362000c1f565b9150826002028217905092915050565b62000c6882620009e3565b67ffffffffffffffff81111562000c845762000c83620009ee565b5b62000c90825462000a4c565b62000c9d82828562000bc2565b600060209050601f83116001811462000cd5576000841562000cc0578287015190505b62000ccc858262000c3f565b86555062000d3c565b601f19841662000ce58662000a81565b60005b8281101562000d0f5784890151825560018201915060208501945060208101905062000ce8565b8683101562000d2f578489015162000d2b601f89168262000c1f565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f54686520636f6c6c656374696f6e20697320736f6c64206f7574000000000000600082015250565b600062000d8d601a8362000d44565b915062000d9a8262000d55565b602082019050919050565b6000602082019050818103600083015262000dc08162000d7e565b9050919050565b600081905092915050565b60005b8381101562000df257808201518184015260208101905062000dd5565b60008484015250505050565b600062000e0b82620009e3565b62000e17818562000dc7565b935062000e2981856020860162000dd2565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600062000e6d60058362000dc7565b915062000e7a8262000e35565b600582019050919050565b600062000e93828462000dfe565b915062000ea08262000e5e565b915081905092915050565b6000815462000eba8162000a4c565b62000ec6818662000dc7565b9450600182166000811462000ee4576001811462000efa5762000f31565b60ff198316865281151582028601935062000f31565b62000f058562000a81565b60005b8381101562000f295781548189015260018201915060208101905062000f08565b838801955050505b50505092915050565b600062000f48828562000eab565b915062000f56828462000dfe565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f9e8262000b09565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000fd35762000fd262000f62565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200101a8262000b09565b9150620010278362000b09565b9250826200103a576200103962000fde565b5b828204905092915050565b6000620010528262000b09565b91506200105f8362000b09565b92508282039050818111156200107a576200107962000f62565b5b92915050565b60006200108d8262000b09565b91506200109a8362000b09565b925082620010ad57620010ac62000fde565b5b828206905092915050565b6000620010c58262000b09565b9150620010d28362000b09565b9250828201905080821115620010ed57620010ec62000f62565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b600062001180602e8362000d44565b91506200118d8262001122565b604082019050919050565b60006020820190508181036000830152620011b38162001171565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006200121860328362000d44565b91506200122582620011ba565b604082019050919050565b600060208201905081810360008301526200124b8162001209565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006200128a60208362000d44565b9150620012978262001252565b602082019050919050565b60006020820190508181036000830152620012bd816200127b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000620012fc601c8362000d44565b91506200130982620012c4565b602082019050919050565b600060208201905081810360008301526200132f81620012ed565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620013638262001336565b9050919050565b620013758162001356565b82525050565b620013868162000b09565b82525050565b600081519050919050565b600082825260208201905092915050565b6000601f19601f8301169050919050565b6000620013c6826200138c565b620013d2818562001397565b9350620013e481856020860162000dd2565b620013ef81620013a8565b840191505092915050565b60006080820190506200141160008301876200136a565b6200142060208301866200136a565b6200142f60408301856200137b565b8181036060830152620014438184620013b9565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6200148a8162001453565b81146200149657600080fd5b50565b600081519050620014aa816200147f565b92915050565b600060208284031215620014c957620014c86200144e565b5b6000620014d98482850162001499565b91505092915050565b61387380620014f26000396000f3fe6080604052600436106101c25760003560e01c8063714c5398116100f7578063bce6d67211610095578063e985e9c511610064578063e985e9c5146105d1578063eced02801461060e578063f2fde38b14610639578063f3f0cd7f14610662576101c2565b8063bce6d6721461053b578063bd3e19d414610552578063c8704c591461057d578063c87b56dd14610594576101c2565b806395d89b41116100d157806395d89b4114610493578063a22cb465146104be578063b29f7e8e146104e7578063b88d4fde14610512576101c2565b8063714c539814610426578063715018a6146104515780638da5cb5b14610468576101c2565b806340c10f191161016457806355f804b31161013e57806355f804b31461036c5780636352211e1461039557806364f101f0146103d257806370a08231146103e9576101c2565b806340c10f19146102fe57806342842e0e1461031a57806344a0d68a14610343576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806323b872dd146102955780632cc82655146102be5780633ccfd60b146102e7576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906121cc565b61069f565b6040516101fb9190612214565b60405180910390f35b34801561021057600080fd5b50610219610781565b60405161022691906122bf565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612317565b610813565b6040516102639190612385565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e91906123cc565b610859565b005b3480156102a157600080fd5b506102bc60048036038101906102b7919061240c565b610970565b005b3480156102ca57600080fd5b506102e560048036038101906102e09190612317565b6109d0565b005b3480156102f357600080fd5b506102fc6109e2565b005b610318600480360381019061031391906123cc565b610a2a565b005b34801561032657600080fd5b50610341600480360381019061033c919061240c565b610ce3565b005b34801561034f57600080fd5b5061036a60048036038101906103659190612317565b610d03565b005b34801561037857600080fd5b50610393600480360381019061038e91906124c4565b610d15565b005b3480156103a157600080fd5b506103bc60048036038101906103b79190612317565b610d33565b6040516103c99190612385565b60405180910390f35b3480156103de57600080fd5b506103e7610de4565b005b3480156103f557600080fd5b50610410600480360381019061040b9190612511565b610df6565b60405161041d919061254d565b60405180910390f35b34801561043257600080fd5b5061043b610ead565b60405161044891906122bf565b60405180910390f35b34801561045d57600080fd5b50610466610f47565b005b34801561047457600080fd5b5061047d610f5b565b60405161048a9190612385565b60405180910390f35b34801561049f57600080fd5b506104a8610f85565b6040516104b591906122bf565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190612594565b611017565b005b3480156104f357600080fd5b506104fc61102d565b604051610509919061254d565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190612704565b61103f565b005b34801561054757600080fd5b506105506110a1565b005b34801561055e57600080fd5b506105676110b3565b604051610574919061254d565b60405180910390f35b34801561058957600080fd5b506105926110c5565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190612317565b6111a9565b6040516105c891906122bf565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f39190612787565b6111fc565b6040516106059190612214565b60405180910390f35b34801561061a57600080fd5b50610623611290565b604051610630919061254d565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190612511565b6112a2565b005b34801561066e57600080fd5b5061068960048036038101906106849190612317565b611325565b60405161069691906122bf565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061077a575061077982611527565b5b9050919050565b606060008054610790906127f6565b80601f01602080910402602001604051908101604052809291908181526020018280546107bc906127f6565b80156108095780601f106107de57610100808354040283529160200191610809565b820191906000526020600020905b8154815290600101906020018083116107ec57829003601f168201915b5050505050905090565b600061081e82611591565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086482610d33565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb90612899565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108f36115dc565b73ffffffffffffffffffffffffffffffffffffffff16148061092257506109218161091c6115dc565b6111fc565b5b610961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109589061292b565b60405180910390fd5b61096b83836115e4565b505050565b61098161097b6115dc565b8261169d565b6109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b7906129bd565b60405180910390fd5b6109cb838383611732565b505050565b6109d8611998565b8060088190555050565b6109ea611998565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610a2857600080fd5b565b6001600b5414610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690612a29565b60405180910390fd5b600060085403610bb55766354a6ba7a1800060098190555080600954610a959190612a78565b341015610ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ace90612b2c565b60405180910390fd5b60005b81811015610baf576000610aee600c611380565b9050610d048110610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b90612b98565b60405180910390fd5b610b3e600c61138e565b610b488482611a16565b610b9b81600a610b57846113a4565b604051602001610b679190612c40565b604051602081830303815290604052604051602001610b87929190612cfa565b604051602081830303815290604052611a34565b508080610ba790612d1e565b915050610ada565b50610cdf565b80600954610bc39190612a78565b341015610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90612b2c565b60405180910390fd5b60005b81811015610cdd576000610c1c600c611380565b9050610d048110610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990612b98565b60405180910390fd5b610c6c600c61138e565b610c768482611a16565b610cc981600a610c85846113a4565b604051602001610c959190612c40565b604051602081830303815290604052604051602001610cb5929190612cfa565b604051602081830303815290604052611a34565b508080610cd590612d1e565b915050610c08565b505b5050565b610cfe8383836040518060200160405280600081525061103f565b505050565b610d0b611998565b8060098190555050565b610d1d611998565b8181600a9182610d2e929190612f08565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290613024565b60405180910390fd5b80915050919050565b610dec611998565b6000600b81905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d906130b6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060610eb7611998565b600a8054610ec4906127f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef0906127f6565b8015610f3d5780601f10610f1257610100808354040283529160200191610f3d565b820191906000526020600020905b815481529060010190602001808311610f2057829003601f168201915b5050505050905090565b610f4f611998565b610f596000611aa1565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f94906127f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc0906127f6565b801561100d5780601f10610fe25761010080835404028352916020019161100d565b820191906000526020600020905b815481529060010190602001808311610ff057829003601f168201915b5050505050905090565b6110296110226115dc565b8383611b67565b5050565b6000611037611998565b600b54905090565b61105061104a6115dc565b8361169d565b61108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906129bd565b60405180910390fd5b61109b84848484611cd3565b50505050565b6110a9611998565b6001600b81905550565b60006110bd611998565b600954905090565b6110cd611998565b60005b60328110156111a65760006110e5600c611380565b9050610d04811061112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112290612b98565b60405180910390fd5b611135600c61138e565b61113f3382611a16565b61119281600a61114e846113a4565b60405160200161115e9190612c40565b60405160208183030381529060405260405160200161117e929190612cfa565b604051602081830303815290604052611a34565b50808061119e90612d1e565b9150506110d0565b50565b6060600a6111b6836113a4565b6040516020016111c69190612c40565b6040516020818303038152906040526040516020016111e6929190612cfa565b6040516020818303038152906040529050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061129a611998565b600854905090565b6112aa611998565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090613148565b60405180910390fd5b61132281611aa1565b50565b606061132f611998565b600a61133a836113a4565b60405160200161134a9190612c40565b60405160208183030381529060405260405160200161136a929190612cfa565b6040516020818303038152906040529050919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6060600082036113eb576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506114ff565b600082905060005b6000821461141d57808061140690612d1e565b915050600a826114169190613197565b91506113f3565b60008167ffffffffffffffff811115611439576114386125d9565b5b6040519080825280601f01601f19166020018201604052801561146b5781602001600182028036833780820191505090505b5090505b600085146114f85760018261148491906131c8565b9150600a8561149391906131fc565b603061149f919061322d565b60f81b8183815181106114b5576114b4613261565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856114f19190613197565b945061146f565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61159a81611d2f565b6115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090613024565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661165783610d33565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806116a983610d33565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116eb57506116ea81856111fc565b5b8061172957508373ffffffffffffffffffffffffffffffffffffffff1661171184610813565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661175282610d33565b73ffffffffffffffffffffffffffffffffffffffff16146117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90613302565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e90613394565b60405180910390fd5b611822838383611d9b565b61182d6000826115e4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461187d91906131c8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118d4919061322d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611993838383611da0565b505050565b6119a06115dc565b73ffffffffffffffffffffffffffffffffffffffff166119be610f5b565b73ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90613400565b60405180910390fd5b565b611a30828260405180602001604052806000815250611da5565b5050565b611a3d82611d2f565b611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7390613492565b60405180910390fd5b80600660008481526020019081526020016000209081611a9c91906134b2565b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc906135d0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cc69190612214565b60405180910390a3505050565b611cde848484611732565b611cea84848484611e00565b611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090613662565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b611daf8383611f87565b611dbc6000848484611e00565b611dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df290613662565b60405180910390fd5b505050565b6000611e218473ffffffffffffffffffffffffffffffffffffffff16611504565b15611f7a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e4a6115dc565b8786866040518563ffffffff1660e01b8152600401611e6c94939291906136d7565b6020604051808303816000875af1925050508015611ea857506040513d601f19601f82011682018060405250810190611ea59190613738565b60015b611f2a573d8060008114611ed8576040519150601f19603f3d011682016040523d82523d6000602084013e611edd565b606091505b506000815103611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990613662565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f7f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed906137b1565b60405180910390fd5b611fff81611d2f565b1561203f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120369061381d565b60405180910390fd5b61204b60008383611d9b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461209b919061322d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461215c60008383611da0565b5050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6121a981612174565b81146121b457600080fd5b50565b6000813590506121c6816121a0565b92915050565b6000602082840312156121e2576121e161216a565b5b60006121f0848285016121b7565b91505092915050565b60008115159050919050565b61220e816121f9565b82525050565b60006020820190506122296000830184612205565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561226957808201518184015260208101905061224e565b60008484015250505050565b6000601f19601f8301169050919050565b60006122918261222f565b61229b818561223a565b93506122ab81856020860161224b565b6122b481612275565b840191505092915050565b600060208201905081810360008301526122d98184612286565b905092915050565b6000819050919050565b6122f4816122e1565b81146122ff57600080fd5b50565b600081359050612311816122eb565b92915050565b60006020828403121561232d5761232c61216a565b5b600061233b84828501612302565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061236f82612344565b9050919050565b61237f81612364565b82525050565b600060208201905061239a6000830184612376565b92915050565b6123a981612364565b81146123b457600080fd5b50565b6000813590506123c6816123a0565b92915050565b600080604083850312156123e3576123e261216a565b5b60006123f1858286016123b7565b925050602061240285828601612302565b9150509250929050565b6000806000606084860312156124255761242461216a565b5b6000612433868287016123b7565b9350506020612444868287016123b7565b925050604061245586828701612302565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126124845761248361245f565b5b8235905067ffffffffffffffff8111156124a1576124a0612464565b5b6020830191508360018202830111156124bd576124bc612469565b5b9250929050565b600080602083850312156124db576124da61216a565b5b600083013567ffffffffffffffff8111156124f9576124f861216f565b5b6125058582860161246e565b92509250509250929050565b6000602082840312156125275761252661216a565b5b6000612535848285016123b7565b91505092915050565b612547816122e1565b82525050565b6000602082019050612562600083018461253e565b92915050565b612571816121f9565b811461257c57600080fd5b50565b60008135905061258e81612568565b92915050565b600080604083850312156125ab576125aa61216a565b5b60006125b9858286016123b7565b92505060206125ca8582860161257f565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61261182612275565b810181811067ffffffffffffffff821117156126305761262f6125d9565b5b80604052505050565b6000612643612160565b905061264f8282612608565b919050565b600067ffffffffffffffff82111561266f5761266e6125d9565b5b61267882612275565b9050602081019050919050565b82818337600083830152505050565b60006126a76126a284612654565b612639565b9050828152602081018484840111156126c3576126c26125d4565b5b6126ce848285612685565b509392505050565b600082601f8301126126eb576126ea61245f565b5b81356126fb848260208601612694565b91505092915050565b6000806000806080858703121561271e5761271d61216a565b5b600061272c878288016123b7565b945050602061273d878288016123b7565b935050604061274e87828801612302565b925050606085013567ffffffffffffffff81111561276f5761276e61216f565b5b61277b878288016126d6565b91505092959194509250565b6000806040838503121561279e5761279d61216a565b5b60006127ac858286016123b7565b92505060206127bd858286016123b7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061280e57607f821691505b602082108103612821576128206127c7565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061288360218361223a565b915061288e82612827565b604082019050919050565b600060208201905081810360008301526128b281612876565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000612915603e8361223a565b9150612920826128b9565b604082019050919050565b6000602082019050818103600083015261294481612908565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b60006129a7602e8361223a565b91506129b28261294b565b604082019050919050565b600060208201905081810360008301526129d68161299a565b9050919050565b7f4d696e74206973206e6f74206c69766500000000000000000000000000000000600082015250565b6000612a1360108361223a565b9150612a1e826129dd565b602082019050919050565b60006020820190508181036000830152612a4281612a06565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a83826122e1565b9150612a8e836122e1565b9250828202612a9c816122e1565b91508282048414831517612ab357612ab2612a49565b5b5092915050565b7f4e6f7420656e6f756768204554482073656e743b20506c65617365206368656360008201527f6b2074686520616d6f756e742100000000000000000000000000000000000000602082015250565b6000612b16602d8361223a565b9150612b2182612aba565b604082019050919050565b60006020820190508181036000830152612b4581612b09565b9050919050565b7f54686520636f6c6c656374696f6e20697320736f6c64206f7574000000000000600082015250565b6000612b82601a8361223a565b9150612b8d82612b4c565b602082019050919050565b60006020820190508181036000830152612bb181612b75565b9050919050565b600081905092915050565b6000612bce8261222f565b612bd88185612bb8565b9350612be881856020860161224b565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000612c2a600583612bb8565b9150612c3582612bf4565b600582019050919050565b6000612c4c8284612bc3565b9150612c5782612c1d565b915081905092915050565b60008190508160005260206000209050919050565b60008154612c84816127f6565b612c8e8186612bb8565b94506001821660008114612ca95760018114612cbe57612cf1565b60ff1983168652811515820286019350612cf1565b612cc785612c62565b60005b83811015612ce957815481890152600182019150602081019050612cca565b838801955050505b50505092915050565b6000612d068285612c77565b9150612d128284612bc3565b91508190509392505050565b6000612d29826122e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d5b57612d5a612a49565b5b600182019050919050565b600082905092915050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612dbe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612d81565b612dc88683612d81565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612e05612e00612dfb846122e1565b612de0565b6122e1565b9050919050565b6000819050919050565b612e1f83612dea565b612e33612e2b82612e0c565b848454612d8e565b825550505050565b600090565b612e48612e3b565b612e53818484612e16565b505050565b5b81811015612e7757612e6c600082612e40565b600181019050612e59565b5050565b601f821115612ebc57612e8d81612c62565b612e9684612d71565b81016020851015612ea5578190505b612eb9612eb185612d71565b830182612e58565b50505b505050565b600082821c905092915050565b6000612edf60001984600802612ec1565b1980831691505092915050565b6000612ef88383612ece565b9150826002028217905092915050565b612f128383612d66565b67ffffffffffffffff811115612f2b57612f2a6125d9565b5b612f3582546127f6565b612f40828285612e7b565b6000601f831160018114612f6f5760008415612f5d578287013590505b612f678582612eec565b865550612fcf565b601f198416612f7d86612c62565b60005b82811015612fa557848901358255600182019150602085019450602081019050612f80565b86831015612fc25784890135612fbe601f891682612ece565b8355505b6001600288020188555050505b50505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061300e60188361223a565b915061301982612fd8565b602082019050919050565b6000602082019050818103600083015261303d81613001565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006130a060298361223a565b91506130ab82613044565b604082019050919050565b600060208201905081810360008301526130cf81613093565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061313260268361223a565b915061313d826130d6565b604082019050919050565b6000602082019050818103600083015261316181613125565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131a2826122e1565b91506131ad836122e1565b9250826131bd576131bc613168565b5b828204905092915050565b60006131d3826122e1565b91506131de836122e1565b92508282039050818111156131f6576131f5612a49565b5b92915050565b6000613207826122e1565b9150613212836122e1565b92508261322257613221613168565b5b828206905092915050565b6000613238826122e1565b9150613243836122e1565b925082820190508082111561325b5761325a612a49565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006132ec60258361223a565b91506132f782613290565b604082019050919050565b6000602082019050818103600083015261331b816132df565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061337e60248361223a565b915061338982613322565b604082019050919050565b600060208201905081810360008301526133ad81613371565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133ea60208361223a565b91506133f5826133b4565b602082019050919050565b60006020820190508181036000830152613419816133dd565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b600061347c602e8361223a565b915061348782613420565b604082019050919050565b600060208201905081810360008301526134ab8161346f565b9050919050565b6134bb8261222f565b67ffffffffffffffff8111156134d4576134d36125d9565b5b6134de82546127f6565b6134e9828285612e7b565b600060209050601f83116001811461351c576000841561350a578287015190505b6135148582612eec565b86555061357c565b601f19841661352a86612c62565b60005b828110156135525784890151825560018201915060208501945060208101905061352d565b8683101561356f578489015161356b601f891682612ece565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006135ba60198361223a565b91506135c582613584565b602082019050919050565b600060208201905081810360008301526135e9816135ad565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061364c60328361223a565b9150613657826135f0565b604082019050919050565b6000602082019050818103600083015261367b8161363f565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006136a982613682565b6136b3818561368d565b93506136c381856020860161224b565b6136cc81612275565b840191505092915050565b60006080820190506136ec6000830187612376565b6136f96020830186612376565b613706604083018561253e565b8181036060830152613718818461369e565b905095945050505050565b600081519050613732816121a0565b92915050565b60006020828403121561374e5761374d61216a565b5b600061375c84828501613723565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061379b60208361223a565b91506137a682613765565b602082019050919050565b600060208201905081810360008301526137ca8161378e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613807601c8361223a565b9150613812826137d1565b602082019050919050565b60006020820190508181036000830152613836816137fa565b905091905056fea2646970667358221220ae39c3c51ff0dd4690451c8f7474ad444cd4d6463ca26ef2b1b9945a0f245ac064736f6c63430008110033697066733a2f2f516d4e4e6265314e684a514165597a4c35747361396e55693665397a74595455656a386e4a63757a48425951354b2f