60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a90816200004a919062000492565b506001600b60006101000a81548160ff021916908315150217905550612710600c55600b600d55662386f26fc10000600e553480156200008957600080fd5b506040518060400160405280600781526020017f506f6f50617373000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f506f6f5061000000000000000000000000000000000000000000000000000000815250816001908162000107919062000492565b50806002908162000119919062000492565b5050506200013c620001306200014a60201b60201c565b6200015260201b60201c565b600160088190555062000579565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200029a57607f821691505b602082108103620002b057620002af62000252565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200031a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002db565b620003268683620002db565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003736200036d62000367846200033e565b62000348565b6200033e565b9050919050565b6000819050919050565b6200038f8362000352565b620003a76200039e826200037a565b848454620002e8565b825550505050565b600090565b620003be620003af565b620003cb81848462000384565b505050565b5b81811015620003f357620003e7600082620003b4565b600181019050620003d1565b5050565b601f82111562000442576200040c81620002b6565b6200041784620002cb565b8101602085101562000427578190505b6200043f6200043685620002cb565b830182620003d0565b50505b505050565b600082821c905092915050565b6000620004676000198460080262000447565b1980831691505092915050565b600062000482838362000454565b9150826002028217905092915050565b6200049d8262000218565b67ffffffffffffffff811115620004b957620004b862000223565b5b620004c5825462000281565b620004d2828285620003f7565b600060209050601f8311600181146200050a5760008415620004f5578287015190505b62000501858262000474565b86555062000571565b601f1984166200051a86620002b6565b60005b8281101562000544578489015182556001820191506020850194506020810190506200051d565b8683101562000564578489015162000560601f89168262000454565b8355505b6001600288020188555050505b505050505050565b614a3b80620005896000396000f3fe6080604052600436106102255760003560e01c80636285132311610123578063b88d4fde116100ab578063ede383b41161006f578063ede383b414610827578063f2fde38b14610852578063f4988c0f1461087b578063f59b3ad4146108a4578063fba8c29f146108cf57610225565b8063b88d4fde14610730578063b97e28b914610759578063c87b56dd14610782578063cc9fc476146107bf578063e985e9c5146107ea57610225565b80637d4ccc2c116100f25780637d4ccc2c1461064b5780638da5cb5b1461068857806395d89b41146106b3578063a09fa364146106de578063a22cb4651461070757610225565b8063628513231461057d5780636352211e146105ba57806370a08231146105f7578063715018a61461063457610225565b80631698ba12116101b1578063290cf18811610175578063290cf188146104725780632f745c59146104af57806333b62321146104ec57806342842e0e146105175780634f6ccce71461054057610225565b80631698ba121461039d57806318160ddd146103c857806323b872dd146103f3578063240f72381461041c578063241afdb11461044757610225565b8063081812fc116101f8578063081812fc146102c5578063095ea7b3146103025780631295bb4a1461032b578063130e995b1461035657806315c720e71461038157610225565b806301ffc9a71461022a5780630485b96b146102675780630576850c1461029057806306fdde031461029a575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612fae565b6108fa565b60405161025e9190612ff6565b60405180910390f35b34801561027357600080fd5b5061028e600480360381019061028991906130a5565b610a44565b005b610298610aef565b005b3480156102a657600080fd5b506102af610be4565b6040516102bc9190613175565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190613197565b610c76565b6040516102f991906131d3565b60405180910390f35b34801561030e57600080fd5b50610329600480360381019061032491906130a5565b610cfb565b005b34801561033757600080fd5b50610340610e13565b60405161034d91906131fd565b60405180910390f35b34801561036257600080fd5b5061036b610e19565b6040516103789190613175565b60405180910390f35b61039b60048036038101906103969190613197565b610ea7565b005b3480156103a957600080fd5b506103b261126b565b6040516103bf91906131fd565b60405180910390f35b3480156103d457600080fd5b506103dd611275565b6040516103ea91906131fd565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190613218565b61127e565b005b34801561042857600080fd5b5061043161128e565b60405161043e91906131fd565b60405180910390f35b34801561045357600080fd5b5061045c6112af565b6040516104699190612ff6565b60405180910390f35b34801561047e57600080fd5b506104996004803603810190610494919061326b565b6112c2565b6040516104a69190613356565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d191906130a5565b611370565b6040516104e391906131fd565b60405180910390f35b3480156104f857600080fd5b50610501611560565b60405161050e9190613175565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190613218565b6115ee565b005b34801561054c57600080fd5b5061056760048036038101906105629190613197565b61160e565b60405161057491906131fd565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f919061326b565b611661565b6040516105b191906131fd565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190613197565b611679565b6040516105ee91906131d3565b60405180910390f35b34801561060357600080fd5b5061061e6004803603810190610619919061326b565b61168f565b60405161062b91906131fd565b60405180910390f35b34801561064057600080fd5b50610649611777565b005b34801561065757600080fd5b50610672600480360381019061066d919061326b565b6117ff565b60405161067f9190612ff6565b60405180910390f35b34801561069457600080fd5b5061069d611855565b6040516106aa91906131d3565b60405180910390f35b3480156106bf57600080fd5b506106c861187f565b6040516106d59190613175565b60405180910390f35b3480156106ea57600080fd5b50610705600480360381019061070091906133a4565b611911565b005b34801561071357600080fd5b5061072e600480360381019061072991906133d1565b6119aa565b005b34801561073c57600080fd5b5061075760048036038101906107529190613546565b611b2a565b005b34801561076557600080fd5b50610780600480360381019061077b919061366a565b611b86565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613197565b611c15565b6040516107b69190613175565b60405180910390f35b3480156107cb57600080fd5b506107d4611cbf565b6040516107e191906131fd565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c91906136b3565b611cc5565b60405161081e9190612ff6565b60405180910390f35b34801561083357600080fd5b5061083c611d59565b60405161084991906131fd565b60405180910390f35b34801561085e57600080fd5b506108796004803603810190610874919061326b565b611d68565b005b34801561088757600080fd5b506108a2600480360381019061089d9190613197565b611e5f565b005b3480156108b057600080fd5b506108b9611ee5565b6040516108c691906131fd565b60405180910390f35b3480156108db57600080fd5b506108e4611eeb565b6040516108f191906131fd565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a2d57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3d5750610a3c82611ef5565b5b9050919050565b610a4c611f5f565b73ffffffffffffffffffffffffffffffffffffffff16610a6a611855565b73ffffffffffffffffffffffffffffffffffffffff1614610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab79061373f565b60405180910390fd5b600c5481610acc611275565b610ad6919061378e565b1115610ae157600080fd5b610aeb8282611f67565b5050565b610af7611f5f565b73ffffffffffffffffffffffffffffffffffffffff16610b15611855565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b629061373f565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610b91906137f3565b60006040518083038185875af1925050503d8060008114610bce576040519150601f19603f3d011682016040523d82523d6000602084013e610bd3565b606091505b5050905080610be157600080fd5b50565b606060018054610bf390613837565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1f90613837565b8015610c6c5780601f10610c4157610100808354040283529160200191610c6c565b820191906000526020600020905b815481529060010190602001808311610c4f57829003601f168201915b5050505050905090565b6000610c8182611f85565b610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb7906138da565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d0682611679565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d9061396c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d95611f5f565b73ffffffffffffffffffffffffffffffffffffffff161480610dc45750610dc381610dbe611f5f565b611cc5565b5b610e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfa906139fe565b60405180910390fd5b610e0e838383611f92565b505050565b600e5481565b600a8054610e2690613837565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5290613837565b8015610e9f5780601f10610e7457610100808354040283529160200191610e9f565b820191906000526020600020905b815481529060010190602001808311610e8257829003601f168201915b505050505081565b600260085403610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390613a6a565b60405180910390fd5b6002600881905550600b60009054906101000a900460ff16610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90613ad6565b60405180910390fd5b600c5481610f4f611275565b610f59919061378e565b1115610f6457600080fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f9c57600080fd5b600d5481600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fea919061378e565b111561102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290613b42565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111a257600181101561108a57600080fd5b600e5460018261109a9190613b62565b6110a49190613b96565b34146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90613c24565b60405180910390fd5b6110ef3382611f67565b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461113e919061378e565b925050819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611260565b60018110156111b057600080fd5b600e54816111be9190613b96565b34146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690613c24565b60405180910390fd5b6112093382611f67565b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611258919061378e565b925050819055505b600160088190555050565b6000600e54905090565b60008054905090565b611289838383612044565b505050565b600080611299611275565b600c546112a69190613b62565b90508091505090565b600b60009054906101000a900460ff1681565b606060006112cf8361168f565b905060008167ffffffffffffffff8111156112ed576112ec61341b565b5b60405190808252806020026020018201604052801561131b5781602001602082028036833780820191505090505b50905060005b82811015611365576113338582611370565b82828151811061134657611345613c44565b5b602002602001018181525050808061135d90613c73565b915050611321565b508092505050919050565b600061137b8361168f565b82106113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613d2d565b60405180910390fd5b60006113c6611275565b905060008060005b8381101561151e576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146114c057806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115105786840361150757819550505050505061155a565b83806001019450505b5080806001019150506113ce565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613dbf565b60405180910390fd5b92915050565b6009805461156d90613837565b80601f016020809104026020016040519081016040528092919081815260200182805461159990613837565b80156115e65780601f106115bb576101008083540402835291602001916115e6565b820191906000526020600020905b8154815290600101906020018083116115c957829003601f168201915b505050505081565b61160983838360405180602001604052806000815250611b2a565b505050565b6000611618611275565b8210611659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165090613e51565b60405180910390fd5b819050919050565b600f6020528060005260406000206000915090505481565b600061168482612582565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690613ee3565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61177f611f5f565b73ffffffffffffffffffffffffffffffffffffffff1661179d611855565b73ffffffffffffffffffffffffffffffffffffffff16146117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea9061373f565b60405180910390fd5b6117fd600061271c565b565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461188e90613837565b80601f01602080910402602001604051908101604052809291908181526020018280546118ba90613837565b80156119075780601f106118dc57610100808354040283529160200191611907565b820191906000526020600020905b8154815290600101906020018083116118ea57829003601f168201915b5050505050905090565b611919611f5f565b73ffffffffffffffffffffffffffffffffffffffff16611937611855565b73ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119849061373f565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6119b2611f5f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690613f4f565b60405180910390fd5b8060066000611a2c611f5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ad9611f5f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b1e9190612ff6565b60405180910390a35050565b611b35848484612044565b611b41848484846127e2565b611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790613fe1565b60405180910390fd5b50505050565b611b8e611f5f565b73ffffffffffffffffffffffffffffffffffffffff16611bac611855565b73ffffffffffffffffffffffffffffffffffffffff1614611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf99061373f565b60405180910390fd5b8060099081611c1191906141ad565b5050565b6060611c2082611f85565b611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c56906142f1565b60405180910390fd5b6000611c69612969565b90506000815103611c895760405180602001604052806000815250611cb7565b80611c93846129fb565b600a604051602001611ca7939291906143d0565b6040516020818303038152906040525b915050919050565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000611d63611275565b905090565b611d70611f5f565b73ffffffffffffffffffffffffffffffffffffffff16611d8e611855565b73ffffffffffffffffffffffffffffffffffffffff1614611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb9061373f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a90614473565b60405180910390fd5b611e5c8161271c565b50565b611e67611f5f565b73ffffffffffffffffffffffffffffffffffffffff16611e85611855565b73ffffffffffffffffffffffffffffffffffffffff1614611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed29061373f565b60405180910390fd5b80600d8190555050565b600d5481565b6000600d54905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b611f81828260405180602001604052806000815250612b5b565b5050565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061204f82612582565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612076611f5f565b73ffffffffffffffffffffffffffffffffffffffff1614806120d2575061209b611f5f565b73ffffffffffffffffffffffffffffffffffffffff166120ba84610c76565b73ffffffffffffffffffffffffffffffffffffffff16145b806120ee57506120ed82600001516120e8611f5f565b611cc5565b5b905080612130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212790614505565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990614597565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890614629565b60405180910390fd5b61221e8585856001612b6d565b61222e6000848460000151611f92565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036125125761247181611f85565b156125115782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461257b8585856001612b73565b5050505050565b61258a612f08565b61259382611f85565b6125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c9906146bb565b60405180910390fd5b60008290505b600081106126db576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126cc578092505050612717565b508080600190039150506125d8565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e9061474d565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006128038473ffffffffffffffffffffffffffffffffffffffff16612b79565b1561295c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261282c611f5f565b8786866040518563ffffffff1660e01b815260040161284e94939291906147c2565b6020604051808303816000875af192505050801561288a57506040513d601f19601f820116820180604052508101906128879190614823565b60015b61290c573d80600081146128ba576040519150601f19603f3d011682016040523d82523d6000602084013e6128bf565b606091505b506000815103612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb90613fe1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612961565b600190505b949350505050565b60606009805461297890613837565b80601f01602080910402602001604051908101604052809291908181526020018280546129a490613837565b80156129f15780601f106129c6576101008083540402835291602001916129f1565b820191906000526020600020905b8154815290600101906020018083116129d457829003601f168201915b5050505050905090565b606060008203612a42576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b56565b600082905060005b60008214612a74578080612a5d90613c73565b915050600a82612a6d919061487f565b9150612a4a565b60008167ffffffffffffffff811115612a9057612a8f61341b565b5b6040519080825280601f01601f191660200182016040528015612ac25781602001600182028036833780820191505090505b5090505b60008514612b4f57600182612adb9190613b62565b9150600a85612aea91906148b0565b6030612af6919061378e565b60f81b818381518110612b0c57612b0b613c44565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b48919061487f565b9450612ac6565b8093505050505b919050565b612b688383836001612b8c565b505050565b50505050565b50505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf890614953565b60405180910390fd5b60008403612c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3b906149e5565b60405180910390fd5b612c516000868387612b6d565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612eeb57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612ed657612e9660008884886127e2565b612ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecc90613fe1565b60405180910390fd5b5b81806001019250508080600101915050612e1f565b508060008190555050612f016000868387612b73565b5050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f8b81612f56565b8114612f9657600080fd5b50565b600081359050612fa881612f82565b92915050565b600060208284031215612fc457612fc3612f4c565b5b6000612fd284828501612f99565b91505092915050565b60008115159050919050565b612ff081612fdb565b82525050565b600060208201905061300b6000830184612fe7565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061303c82613011565b9050919050565b61304c81613031565b811461305757600080fd5b50565b60008135905061306981613043565b92915050565b6000819050919050565b6130828161306f565b811461308d57600080fd5b50565b60008135905061309f81613079565b92915050565b600080604083850312156130bc576130bb612f4c565b5b60006130ca8582860161305a565b92505060206130db85828601613090565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561311f578082015181840152602081019050613104565b60008484015250505050565b6000601f19601f8301169050919050565b6000613147826130e5565b61315181856130f0565b9350613161818560208601613101565b61316a8161312b565b840191505092915050565b6000602082019050818103600083015261318f818461313c565b905092915050565b6000602082840312156131ad576131ac612f4c565b5b60006131bb84828501613090565b91505092915050565b6131cd81613031565b82525050565b60006020820190506131e860008301846131c4565b92915050565b6131f78161306f565b82525050565b600060208201905061321260008301846131ee565b92915050565b60008060006060848603121561323157613230612f4c565b5b600061323f8682870161305a565b93505060206132508682870161305a565b925050604061326186828701613090565b9150509250925092565b60006020828403121561328157613280612f4c565b5b600061328f8482850161305a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132cd8161306f565b82525050565b60006132df83836132c4565b60208301905092915050565b6000602082019050919050565b600061330382613298565b61330d81856132a3565b9350613318836132b4565b8060005b8381101561334957815161333088826132d3565b975061333b836132eb565b92505060018101905061331c565b5085935050505092915050565b6000602082019050818103600083015261337081846132f8565b905092915050565b61338181612fdb565b811461338c57600080fd5b50565b60008135905061339e81613378565b92915050565b6000602082840312156133ba576133b9612f4c565b5b60006133c88482850161338f565b91505092915050565b600080604083850312156133e8576133e7612f4c565b5b60006133f68582860161305a565b92505060206134078582860161338f565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6134538261312b565b810181811067ffffffffffffffff821117156134725761347161341b565b5b80604052505050565b6000613485612f42565b9050613491828261344a565b919050565b600067ffffffffffffffff8211156134b1576134b061341b565b5b6134ba8261312b565b9050602081019050919050565b82818337600083830152505050565b60006134e96134e484613496565b61347b565b90508281526020810184848401111561350557613504613416565b5b6135108482856134c7565b509392505050565b600082601f83011261352d5761352c613411565b5b813561353d8482602086016134d6565b91505092915050565b600080600080608085870312156135605761355f612f4c565b5b600061356e8782880161305a565b945050602061357f8782880161305a565b935050604061359087828801613090565b925050606085013567ffffffffffffffff8111156135b1576135b0612f51565b5b6135bd87828801613518565b91505092959194509250565b600067ffffffffffffffff8211156135e4576135e361341b565b5b6135ed8261312b565b9050602081019050919050565b600061360d613608846135c9565b61347b565b90508281526020810184848401111561362957613628613416565b5b6136348482856134c7565b509392505050565b600082601f83011261365157613650613411565b5b81356136618482602086016135fa565b91505092915050565b6000602082840312156136805761367f612f4c565b5b600082013567ffffffffffffffff81111561369e5761369d612f51565b5b6136aa8482850161363c565b91505092915050565b600080604083850312156136ca576136c9612f4c565b5b60006136d88582860161305a565b92505060206136e98582860161305a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137296020836130f0565b9150613734826136f3565b602082019050919050565b600060208201905081810360008301526137588161371c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137998261306f565b91506137a48361306f565b92508282019050808211156137bc576137bb61375f565b5b92915050565b600081905092915050565b50565b60006137dd6000836137c2565b91506137e8826137cd565b600082019050919050565b60006137fe826137d0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061384f57607f821691505b60208210810361386257613861613808565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006138c4602d836130f0565b91506138cf82613868565b604082019050919050565b600060208201905081810360008301526138f3816138b7565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006139566022836130f0565b9150613961826138fa565b604082019050919050565b6000602082019050818103600083015261398581613949565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006139e86039836130f0565b91506139f38261398c565b604082019050919050565b60006020820190508181036000830152613a17816139db565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613a54601f836130f0565b9150613a5f82613a1e565b602082019050919050565b60006020820190508181036000830152613a8381613a47565b9050919050565b7f4d696e74206973206e6f74204c69766500000000000000000000000000000000600082015250565b6000613ac06010836130f0565b9150613acb82613a8a565b602082019050919050565b60006020820190508181036000830152613aef81613ab3565b9050919050565b7f596f7520617265206e6f7420616c6c6f77656420746f206d696e74206d6f7265600082015250565b6000613b2c6020836130f0565b9150613b3782613af6565b602082019050919050565b60006020820190508181036000830152613b5b81613b1f565b9050919050565b6000613b6d8261306f565b9150613b788361306f565b9250828203905081811115613b9057613b8f61375f565b5b92915050565b6000613ba18261306f565b9150613bac8361306f565b9250828202613bba8161306f565b91508282048414831517613bd157613bd061375f565b5b5092915050565b7f596f75206e65656420746f2073656e64206d6f72652045544800000000000000600082015250565b6000613c0e6019836130f0565b9150613c1982613bd8565b602082019050919050565b60006020820190508181036000830152613c3d81613c01565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613c7e8261306f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cb057613caf61375f565b5b600182019050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d176022836130f0565b9150613d2282613cbb565b604082019050919050565b60006020820190508181036000830152613d4681613d0a565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613da9602e836130f0565b9150613db482613d4d565b604082019050919050565b60006020820190508181036000830152613dd881613d9c565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e3b6023836130f0565b9150613e4682613ddf565b604082019050919050565b60006020820190508181036000830152613e6a81613e2e565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613ecd602b836130f0565b9150613ed882613e71565b604082019050919050565b60006020820190508181036000830152613efc81613ec0565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613f39601a836130f0565b9150613f4482613f03565b602082019050919050565b60006020820190508181036000830152613f6881613f2c565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613fcb6033836130f0565b9150613fd682613f6f565b604082019050919050565b60006020820190508181036000830152613ffa81613fbe565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614026565b61406d8683614026565b95508019841693508086168417925050509392505050565b6000819050919050565b60006140aa6140a56140a08461306f565b614085565b61306f565b9050919050565b6000819050919050565b6140c48361408f565b6140d86140d0826140b1565b848454614033565b825550505050565b600090565b6140ed6140e0565b6140f88184846140bb565b505050565b5b8181101561411c576141116000826140e5565b6001810190506140fe565b5050565b601f8211156141615761413281614001565b61413b84614016565b8101602085101561414a578190505b61415e61415685614016565b8301826140fd565b50505b505050565b600082821c905092915050565b600061418460001984600802614166565b1980831691505092915050565b600061419d8383614173565b9150826002028217905092915050565b6141b6826130e5565b67ffffffffffffffff8111156141cf576141ce61341b565b5b6141d98254613837565b6141e4828285614120565b600060209050601f8311600181146142175760008415614205578287015190505b61420f8582614191565b865550614277565b601f19841661422586614001565b60005b8281101561424d57848901518255600182019150602085019450602081019050614228565b8683101561426a5784890151614266601f891682614173565b8355505b6001600288020188555050505b505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006142db602f836130f0565b91506142e68261427f565b604082019050919050565b6000602082019050818103600083015261430a816142ce565b9050919050565b600081905092915050565b6000614327826130e5565b6143318185614311565b9350614341818560208601613101565b80840191505092915050565b6000815461435a81613837565b6143648186614311565b9450600182166000811461437f5760018114614394576143c7565b60ff19831686528115158202860193506143c7565b61439d85614001565b60005b838110156143bf578154818901526001820191506020810190506143a0565b838801955050505b50505092915050565b60006143dc828661431c565b91506143e8828561431c565b91506143f4828461434d565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061445d6026836130f0565b915061446882614401565b604082019050919050565b6000602082019050818103600083015261448c81614450565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006144ef6032836130f0565b91506144fa82614493565b604082019050919050565b6000602082019050818103600083015261451e816144e2565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006145816026836130f0565b915061458c82614525565b604082019050919050565b600060208201905081810360008301526145b081614574565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006146136025836130f0565b915061461e826145b7565b604082019050919050565b6000602082019050818103600083015261464281614606565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006146a5602a836130f0565b91506146b082614649565b604082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000614737602f836130f0565b9150614742826146db565b604082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006147948261476d565b61479e8185614778565b93506147ae818560208601613101565b6147b78161312b565b840191505092915050565b60006080820190506147d760008301876131c4565b6147e460208301866131c4565b6147f160408301856131ee565b81810360608301526148038184614789565b905095945050505050565b60008151905061481d81612f82565b92915050565b60006020828403121561483957614838612f4c565b5b60006148478482850161480e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061488a8261306f565b91506148958361306f565b9250826148a5576148a4614850565b5b828204905092915050565b60006148bb8261306f565b91506148c68361306f565b9250826148d6576148d5614850565b5b828206905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061493d6021836130f0565b9150614948826148e1565b604082019050919050565b6000602082019050818103600083015261496c81614930565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b60006149cf6028836130f0565b91506149da82614973565b604082019050919050565b600060208201905081810360008301526149fe816149c2565b905091905056fea2646970667358221220c795963b148d18abcec8db9427ed6c41b7eb0f386ee3f40d781d310194ee2b7964736f6c63430008120033