UNPKG

ngx-spine

Version:

[![Build Status](https://travis-ci.org/PoiScript/ngx-spine.svg?branch=master)](https://travis-ci.org/PoiScript/ngx-spine)

243 lines 27.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; /****************************************************************************** * Spine Runtimes License Agreement * Last updated May 1, 2019. Replaces all prior versions. * * Copyright (c) 2013-2019, Esoteric Software LLC * * Integration of the Spine Runtimes into software or otherwise creating * derivative works of the Spine Runtimes is permitted under the terms and * conditions of Section 2 of the Spine Editor License Agreement: * http://esotericsoftware.com/spine-editor-license * * Otherwise, it is permitted to integrate the Spine Runtimes into software * or otherwise create derivative works of the Spine Runtimes (collectively, * "Products"), provided that each user of the Products must obtain their own * Spine Editor license and redistribution of the Products in any form must * include this license and copyright notice. * * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN * NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS * INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ import { Utils, Color } from "../Utils"; import { VertexAttachment } from "./Attachment"; import { TextureAtlasRegion } from "../TextureAtlas"; var MeshAttachment = /** @class */ (function (_super) { tslib_1.__extends(MeshAttachment, _super); function MeshAttachment(name) { var _this = _super.call(this, name) || this; _this.color = new Color(1, 1, 1, 1); _this.tempColor = new Color(0, 0, 0, 0); return _this; } /** * @return {?} */ MeshAttachment.prototype.updateUVs = /** * @return {?} */ function () { /** @type {?} */ var regionUVs = this.regionUVs; if (this.uvs == null || this.uvs.length != regionUVs.length) this.uvs = Utils.newFloatArray(regionUVs.length); /** @type {?} */ var uvs = this.uvs; /** @type {?} */ var n = this.uvs.length; /** @type {?} */ var u = this.region.u; /** @type {?} */ var v = this.region.v; /** @type {?} */ var width = 0; /** @type {?} */ var height = 0; if (this.region instanceof TextureAtlasRegion) { /** @type {?} */ var region = this.region; /** @type {?} */ var textureWidth = region.texture.getImage().width; /** @type {?} */ var textureHeight = region.texture.getImage().height; switch (region.degrees) { case 90: u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; width = region.originalHeight / textureWidth; height = region.originalWidth / textureHeight; for (var i = 0; i < n; i += 2) { uvs[i] = u + regionUVs[i + 1] * width; uvs[i + 1] = v + (1 - regionUVs[i]) * height; } return; case 180: u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; v -= region.offsetY / textureHeight; width = region.originalWidth / textureWidth; height = region.originalHeight / textureHeight; for (var i = 0; i < n; i += 2) { uvs[i] = u + (1 - regionUVs[i]) * width; uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; } return; case 270: u -= region.offsetY / textureWidth; v -= region.offsetX / textureHeight; width = region.originalHeight / textureWidth; height = region.originalWidth / textureHeight; for (var i = 0; i < n; i += 2) { uvs[i] = u + (1 - regionUVs[i + 1]) * width; uvs[i + 1] = v + regionUVs[i] * height; } return; } u -= region.offsetX / textureWidth; v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; width = region.originalWidth / textureWidth; height = region.originalHeight / textureHeight; } else if (this.region == null) { u = v = 0; width = height = 1; } else { width = this.region.u2 - u; height = this.region.v2 - v; } for (var i = 0; i < n; i += 2) { uvs[i] = u + regionUVs[i] * width; uvs[i + 1] = v + regionUVs[i + 1] * height; } }; /** * @return {?} */ MeshAttachment.prototype.getParentMesh = /** * @return {?} */ function () { return this.parentMesh; }; /** @param parentMesh May be null. */ /** * @param {?} parentMesh May be null. * @return {?} */ MeshAttachment.prototype.setParentMesh = /** * @param {?} parentMesh May be null. * @return {?} */ function (parentMesh) { this.parentMesh = parentMesh; if (parentMesh != null) { this.bones = parentMesh.bones; this.vertices = parentMesh.vertices; this.worldVerticesLength = parentMesh.worldVerticesLength; this.regionUVs = parentMesh.regionUVs; this.triangles = parentMesh.triangles; this.hullLength = parentMesh.hullLength; this.worldVerticesLength = parentMesh.worldVerticesLength; } }; /** * @return {?} */ MeshAttachment.prototype.copy = /** * @return {?} */ function () { if (this.parentMesh != null) return this.newLinkedMesh(); /** @type {?} */ var copy = new MeshAttachment(this.name); copy.region = this.region; copy.path = this.path; copy.color.setFromColor(this.color); this.copyTo(copy); copy.regionUVs = new Array(this.regionUVs.length); Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); copy.uvs = new Array(this.uvs.length); Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); copy.triangles = new Array(this.triangles.length); Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); copy.hullLength = this.hullLength; // Nonessential. if (this.edges != null) { copy.edges = new Array(this.edges.length); Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); } copy.width = this.width; copy.height = this.height; return copy; }; /** * @return {?} */ MeshAttachment.prototype.newLinkedMesh = /** * @return {?} */ function () { /** @type {?} */ var copy = new MeshAttachment(this.name); copy.region = this.region; copy.path = this.path; copy.color.setFromColor(this.color); copy.deformAttachment = this.deformAttachment; copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this); copy.updateUVs(); return copy; }; return MeshAttachment; }(VertexAttachment)); export { MeshAttachment }; if (false) { /** @type {?} */ MeshAttachment.prototype.region; /** @type {?} */ MeshAttachment.prototype.path; /** @type {?} */ MeshAttachment.prototype.regionUVs; /** @type {?} */ MeshAttachment.prototype.uvs; /** @type {?} */ MeshAttachment.prototype.triangles; /** @type {?} */ MeshAttachment.prototype.color; /** @type {?} */ MeshAttachment.prototype.width; /** @type {?} */ MeshAttachment.prototype.height; /** @type {?} */ MeshAttachment.prototype.hullLength; /** @type {?} */ MeshAttachment.prototype.edges; /** * @type {?} * @private */ MeshAttachment.prototype.parentMesh; /** @type {?} */ MeshAttachment.prototype.tempColor; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzaEF0dGFjaG1lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc3BpbmUvIiwic291cmNlcyI6WyJsaWIvc3BpbmUtdHMvY29yZS9hdHRhY2htZW50cy9NZXNoQXR0YWNobWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsT0FBTyxFQUFhLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFjLE1BQU0sY0FBYyxDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJEO0lBQW9DLDBDQUFnQjtJQWNsRCx3QkFBWSxJQUFZO1FBQXhCLFlBQ0Usa0JBQU0sSUFBSSxDQUFDLFNBQ1o7UUFWRCxXQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFNOUIsZUFBUyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztJQUlsQyxDQUFDOzs7O0lBRUQsa0NBQVM7OztJQUFUOztZQUNNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztRQUM5QixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNO1lBQ3pELElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7O1lBQy9DLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRzs7WUFDZCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztZQUNuQixDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztZQUNuQixDQUFDLEdBQUcs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SSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7OztJQUVELHNDQUFhOzs7SUFBYjs7WUFDTSxJQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDSCxxQkFBQztBQUFELENBQUMsQUE5SkQsQ0FBb0MsZ0JBQWdCLEdBOEpuRDs7OztJQTdKQyxnQ0FBc0I7O0lBQ3RCLDhCQUFhOztJQUNiLG1DQUE2Qjs7SUFDN0IsNkJBQXVCOztJQUN2QixtQ0FBeUI7O0lBQ3pCLCtCQUE4Qjs7SUFDOUIsK0JBQWM7O0lBQ2QsZ0NBQWU7O0lBQ2Ysb0NBQW1COztJQUNuQiwrQkFBcUI7Ozs7O0lBQ3JCLG9DQUFtQzs7SUFDbkMsbUNBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxyXG4gKiBMYXN0IHVwZGF0ZWQgTWF5IDEsIDIwMTkuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTksIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xyXG4gKlxyXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcclxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcclxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcclxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXHJcbiAqXHJcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxyXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXHJcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cclxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XHJcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxyXG4gKlxyXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTXHJcbiAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVNcclxuICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU5cclxuICogTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsXHJcbiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsXHJcbiAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUywgQlVTSU5FU1NcclxuICogSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxyXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcclxuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLFxyXG4gKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5pbXBvcnQgeyBBcnJheUxpa2UsIFV0aWxzLCBDb2xvciB9IGZyb20gXCIuLi9VdGlsc1wiO1xyXG5pbXBvcnQgeyBUZXh0dXJlUmVnaW9uIH0gZnJvbSBcIi4uL1RleHR1cmVcIjtcclxuaW1wb3J0IHsgVmVydGV4QXR0YWNobWVudCwgQXR0YWNobWVudCB9IGZyb20gXCIuL0F0dGFjaG1lbnRcIjtcclxuaW1wb3J0IHsgVGV4dHVyZUF0bGFzUmVnaW9uIH0gZnJvbSBcIi4uL1RleHR1cmVBdGxhc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1lc2hBdHRhY2htZW50IGV4dGVuZHMgVmVydGV4QXR0YWNobWVudCB7XHJcbiAgcmVnaW9uOiBUZXh0dXJlUmVnaW9uO1xyXG4gIHBhdGg6IHN0cmluZztcclxuICByZWdpb25VVnM6IEFycmF5TGlrZTxudW1iZXI+O1xyXG4gIHV2czogQXJyYXlMaWtlPG51bWJlcj47XHJcbiAgdHJpYW5nbGVzOiBBcnJheTxudW1iZXI+O1xyXG4gIGNvbG9yID0gbmV3IENvbG9yKDEsIDEsIDEsIDEpO1xyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgaHVsbExlbmd0aDogbnVtYmVyO1xyXG4gIGVkZ2VzOiBBcnJheTxudW1iZXI+O1xyXG4gIHByaXZhdGUgcGFyZW50TWVzaDogTWVzaEF0dGFjaG1lbnQ7XHJcbiAgdGVtcENvbG9yID0gbmV3IENvbG9yKDAsIDAsIDAsIDApO1xyXG5cclxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcclxuICAgIHN1cGVyKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVVZzKCkge1xyXG4gICAgbGV0IHJlZ2lvblVWcyA9IHRoaXMucmVnaW9uVVZzO1xyXG4gICAgaWYgKHRoaXMudXZzID09IG51bGwgfHwgdGhpcy51dnMubGVuZ3RoICE9IHJlZ2lvblVWcy5sZW5ndGgpXHJcbiAgICAgIHRoaXMudXZzID0gVXRpbHMubmV3RmxvYXRBcnJheShyZWdpb25VVnMubGVuZ3RoKTtcclxuICAgIGxldCB1dnMgPSB0aGlzLnV2cztcclxuICAgIGxldCBuID0gdGhpcy51dnMubGVuZ3RoO1xyXG4gICAgbGV0IHUgPSB0aGlzLnJlZ2lvbi51LFxyXG4gICAgICB2ID0gdGhpcy5yZWdpb24udixcclxuICAgICAgd2lkdGggPSAwLFxyXG4gICAgICBoZWlnaHQgPSAwO1xyXG4gICAgaWYgKHRoaXMucmVnaW9uIGluc3RhbmNlb2YgVGV4dHVyZUF0bGFzUmVnaW9uKSB7XHJcbiAgICAgIGxldCByZWdpb24gPSB0aGlzLnJlZ2lvbjtcclxuICAgICAgbGV0IHRleHR1cmVXaWR0aCA9IHJlZ2lvbi50ZXh0dXJlLmdldEltYWdlKCkud2lkdGgsXHJcbiAgICAgICAgdGV4dHVyZUhlaWdodCA9IHJlZ2lvbi50ZXh0dXJlLmdldEltYWdlKCkuaGVpZ2h0O1xyXG4gICAgICBzd2l0Y2ggKHJlZ2lvbi5kZWdyZWVzKSB7XHJcbiAgICAgICAgY2FzZSA5MDpcclxuICAgICAgICAgIHUgLT1cclxuICAgICAgICAgICAgKHJlZ2lvbi5vcmlnaW5hbEhlaWdodCAtIHJlZ2lvbi5vZmZzZXRZIC0gcmVnaW9uLmhlaWdodCkgL1xyXG4gICAgICAgICAgICB0ZXh0dXJlV2lkdGg7XHJcbiAgICAgICAgICB2IC09XHJcbiAgICAgICAgICAgIChyZWdpb24ub3JpZ2luYWxXaWR0aCAtIHJlZ2lvbi5vZmZzZXRYIC0gcmVnaW9uLndpZHRoKSAvXHJcbiAgICAgICAgICAgIHRleHR1cmVIZWlnaHQ7XHJcbiAgICAgICAgICB3aWR0aCA9IHJlZ2lvbi5vcmlnaW5hbEhlaWdodCAvIHRleHR1cmVXaWR0aDtcclxuICAgICAgICAgIGhlaWdodCA9IHJlZ2lvbi5vcmlnaW5hbFdpZHRoIC8gdGV4dHVyZUhlaWdodDtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgIHV2c1tpXSA9IHUgKyByZWdpb25VVnNbaSArIDFdICogd2lkdGg7XHJcbiAgICAgICAgICAgIHV2c1tpICsgMV0gPSB2ICsgKDEgLSByZWdpb25VVnNbaV0pICogaGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNhc2UgMTgwOlxyXG4gICAgICAgICAgdSAtPVxyXG4gICAgICAgICAgICAocmVnaW9uLm9yaWdpbmFsV2lkdGggLSByZWdpb24ub2Zmc2V0WCAtIHJlZ2lvbi53aWR0aCkgL1xyXG4gICAgICAgICAgICB0ZXh0dXJlV2lkdGg7XHJcbiAgICAgICAgICB2IC09IHJlZ2lvbi5vZmZzZXRZIC8gdGV4dHVyZUhlaWdodDtcclxuICAgICAgICAgIHdpZHRoID0gcmVnaW9uLm9yaWdpbmFsV2lkdGggLyB0ZXh0dXJlV2lkdGg7XHJcbiAgICAgICAgICBoZWlnaHQgPSByZWdpb24ub3JpZ2luYWxIZWlnaHQgLyB0ZXh0dXJlSGVpZ2h0O1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpICs9IDIpIHtcclxuICAgICAgICAgICAgdXZzW2ldID0gdSArICgxIC0gcmVnaW9uVVZzW2ldKSAqIHdpZHRoO1xyXG4gICAgICAgICAgICB1dnNbaSArIDFdID0gdiArICgxIC0gcmVnaW9uVVZzW2kgKyAxXSkgKiBoZWlnaHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY2FzZSAyNzA6XHJcbiAgICAgICAgICB1IC09IHJlZ2lvbi5vZmZzZXRZIC8gdGV4dHVyZVdpZHRoO1xyXG4gICAgICAgICAgdiAtPSByZWdpb24ub2Zmc2V0WCAvIHRleHR1cmVIZWlnaHQ7XHJcbiAgICAgICAgICB3aWR0aCA9IHJlZ2lvbi5vcmlnaW5hbEhlaWdodCAvIHRleHR1cmVXaWR0aDtcclxuICAgICAgICAgIGhlaWdodCA9IHJlZ2lvbi5vcmlnaW5hbFdpZHRoIC8gdGV4dHVyZUhlaWdodDtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgIHV2c1tpXSA9IHUgKyAoMSAtIHJlZ2lvblVWc1tpICsgMV0pICogd2lkdGg7XHJcbiAgICAgICAgICAgIHV2c1tpICsgMV0gPSB2ICsgcmVnaW9uVVZzW2ldICogaGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHUgLT0gcmVnaW9uLm9mZnNldFggLyB0ZXh0dXJlV2lkdGg7XHJcbiAgICAgIHYgLT1cclxuICAgICAgICAocmVnaW9uLm9yaWdpbmFsSGVpZ2h0IC0gcmVnaW9uLm9mZnNldFkgLSByZWdpb24uaGVpZ2h0KSAvXHJcbiAgICAgICAgdGV4dHVyZUhlaWdodDtcclxuICAgICAgd2lkdGggPSByZWdpb24ub3JpZ2luYWxXaWR0aCAvIHRleHR1cmVXaWR0aDtcclxuICAgICAgaGVpZ2h0ID0gcmVnaW9uLm9yaWdpbmFsSGVpZ2h0IC8gdGV4dHVyZUhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5yZWdpb24gPT0gbnVsbCkge1xyXG4gICAgICB1ID0gdiA9IDA7XHJcbiAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdpZHRoID0gdGhpcy5yZWdpb24udTIgLSB1O1xyXG4gICAgICBoZWlnaHQgPSB0aGlzLnJlZ2lvbi52MiAtIHY7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpICs9IDIpIHtcclxuICAgICAgdXZzW2ldID0gdSArIHJlZ2lvblVWc1tpXSAqIHdpZHRoO1xyXG4gICAgICB1dnNbaSArIDFdID0gdiArIHJlZ2lvblVWc1tpICsgMV0gKiBoZWlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQYXJlbnRNZXNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50TWVzaDtcclxuICB9XHJcblxyXG4gIC8qKiBAcGFyYW0gcGFyZW50TWVzaCBNYXkgYmUgbnVsbC4gKi9cclxuICBzZXRQYXJlbnRNZXNoKHBhcmVudE1lc2g6IE1lc2hBdHRhY2htZW50KSB7XHJcbiAgICB0aGlzLnBhcmVudE1lc2ggPSBwYXJlbnRNZXNoO1xyXG4gICAgaWYgKHBhcmVudE1lc2ggIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmJvbmVzID0gcGFyZW50TWVzaC5ib25lcztcclxuICAgICAgdGhpcy52ZXJ0aWNlcyA9IHBhcmVudE1lc2gudmVydGljZXM7XHJcbiAgICAgIHRoaXMud29ybGRWZXJ0aWNlc0xlbmd0aCA9IHBhcmVudE1lc2gud29ybGRWZXJ0aWNlc0xlbmd0aDtcclxuICAgICAgdGhpcy5yZWdpb25VVnMgPSBwYXJlbnRNZXNoLnJlZ2lvblVWcztcclxuICAgICAgdGhpcy50cmlhbmdsZXMgPSBwYXJlbnRNZXNoLnRyaWFuZ2xlcztcclxuICAgICAgdGhpcy5odWxsTGVuZ3RoID0gcGFyZW50TWVzaC5odWxsTGVuZ3RoO1xyXG4gICAgICB0aGlzLndvcmxkVmVydGljZXNMZW5ndGggPSBwYXJlbnRNZXNoLndvcmxkVmVydGljZXNMZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb3B5KCk6IEF0dGFjaG1lbnQge1xyXG4gICAgaWYgKHRoaXMucGFyZW50TWVzaCAhPSBudWxsKSByZXR1cm4gdGhpcy5uZXdMaW5rZWRNZXNoKCk7XHJcblxyXG4gICAgbGV0IGNvcHkgPSBuZXcgTWVzaEF0dGFjaG1lbnQodGhpcy5uYW1lKTtcclxuICAgIGNvcHkucmVnaW9uID0gdGhpcy5yZWdpb247XHJcbiAgICBjb3B5LnBhdGggPSB0aGlzLnBhdGg7XHJcbiAgICBjb3B5LmNvbG9yLnNldEZyb21Db2xvcih0aGlzLmNvbG9yKTtcclxuXHJcbiAgICB0aGlzLmNvcHlUbyhjb3B5KTtcclxuICAgIGNvcHkucmVnaW9uVVZzID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5yZWdpb25VVnMubGVuZ3RoKTtcclxuICAgIFV0aWxzLmFycmF5Q29weShcclxuICAgICAgdGhpcy5yZWdpb25VVnMsXHJcbiAgICAgIDAsXHJcbiAgICAgIGNvcHkucmVnaW9uVVZzLFxyXG4gICAgICAwLFxyXG4gICAgICB0aGlzLnJlZ2lvblVWcy5sZW5ndGhcclxuICAgICk7XHJcbiAgICBjb3B5LnV2cyA9IG5ldyBBcnJheTxudW1iZXI+KHRoaXMudXZzLmxlbmd0aCk7XHJcbiAgICBVdGlscy5hcnJheUNvcHkodGhpcy51dnMsIDAsIGNvcHkudXZzLCAwLCB0aGlzLnV2cy5sZW5ndGgpO1xyXG4gICAgY29weS50cmlhbmdsZXMgPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLnRyaWFuZ2xlcy5sZW5ndGgpO1xyXG4gICAgVXRpbHMuYXJyYXlDb3B5KFxyXG4gICAgICB0aGlzLnRyaWFuZ2xlcyxcclxuICAgICAgMCxcclxuICAgICAgY29weS50cmlhbmdsZXMsXHJcbiAgICAgIDAsXHJcbiAgICAgIHRoaXMudHJpYW5nbGVzLmxlbmd0aFxyXG4gICAgKTtcclxuICAgIGNvcHkuaHVsbExlbmd0aCA9IHRoaXMuaHVsbExlbmd0aDtcclxuXHJcbiAgICAvLyBOb25lc3NlbnRpYWwuXHJcbiAgICBpZiAodGhpcy5lZGdlcyAhPSBudWxsKSB7XHJcbiAgICAgIGNvcHkuZWRnZXMgPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmVkZ2VzLmxlbmd0aCk7XHJcbiAgICAgIFV0aWxzLmFycmF5Q29weSh0aGlzLmVkZ2VzLCAwLCBjb3B5LmVkZ2VzLCAwLCB0aGlzLmVkZ2VzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBjb3B5LndpZHRoID0gdGhpcy53aWR0aDtcclxuICAgIGNvcHkuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcblxyXG4gICAgcmV0dXJuIGNvcHk7XHJcbiAgfVxyXG5cclxuICBuZXdMaW5rZWRNZXNoKCk6IE1lc2hBdHRhY2htZW50IHtcclxuICAgIGxldCBjb3B5ID0gbmV3IE1lc2hBdHRhY2htZW50KHRoaXMubmFtZSk7XHJcbiAgICBjb3B5LnJlZ2lvbiA9IHRoaXMucmVnaW9uO1xyXG4gICAgY29weS5wYXRoID0gdGhpcy5wYXRoO1xyXG4gICAgY29weS5jb2xvci5zZXRGcm9tQ29sb3IodGhpcy5jb2xvcik7XHJcbiAgICBjb3B5LmRlZm9ybUF0dGFjaG1lbnQgPSB0aGlzLmRlZm9ybUF0dGFjaG1lbnQ7XHJcbiAgICBjb3B5LnNldFBhcmVudE1lc2godGhpcy5wYXJlbnRNZXNoICE9IG51bGwgPyB0aGlzLnBhcmVudE1lc2ggOiB0aGlzKTtcclxuICAgIGNvcHkudXBkYXRlVVZzKCk7XHJcbiAgICByZXR1cm4gY29weTtcclxuICB9XHJcbn1cclxuIl19