{"version":3,"file":"poodll_basemediaskin.min.js","sources":["../src/poodll_basemediaskin.js"],"sourcesContent":["/* jshint ignore:start */\ndefine(['jquery','core/log', 'filter_poodll/utils_amd', 'filter_poodll/dlg_devicesettings', 'filter_poodll/anim_progress_bar', 'filter_poodll/upskin_bar'],\n    function ($, log, utils, settings, anim_progress_bar, upskin_bar) {\n\n        \"use strict\"; // jshint ;_;\n\n        log.debug('PoodLL Base Skin: initialising');\n\n        return {\n\n            instanceprops: null,\n            pmr: null,\n            uploaded: false,\n            devsettings: null,\n\n            //for making multiple instances\n            clone: function () {\n                return $.extend(true, {}, this);\n            },\n\n            init: function (ip, pmr) {\n                this.instanceprops = ip;\n                this.pmr = pmr;\n                this.devsettings = settings.clone();\n                this.devsettings.init(pmr, ip);\n            },\n\n\n            fetch_instanceprops: function () {\n                return this.instanceprops;\n            },\n\n\n            onUploadSuccess: function (controlbarid) {\n                $('#' + controlbarid + ' > .poodll_save-recording').hide();\n                // $('#' + controlbarid  + '_messages').hide();\n                $('#' + controlbarid + ' > .poodll_savedsuccessfully').show();\n            },\n\n            onUploadFailure: function (controlbarid) {\n                return;\n            },\n\n            fetch_status_bar: function (skin) {\n                var status = '<div class=\"poodll_status_' + skin + '\" width=\"100%\" height=\"50\">00:00:00</div>';\n                return status;\n            },\n\n            fetch_preview_audio: function (skin) {\n                var preview = '<audio class=\"poodll_preview_' + skin + '\"  playsinline muted style=\"display: none;\" controls></audio>';\n                return preview;\n            },\n            fetch_preview_video: function (skin) {\n                var preview = '<video class=\"poodll_preview_' + skin + '\" playsinline muted ></video>';\n                return preview;\n            },\n            fetch_resource_audio: function (skin) {\n                var resourceplayer = '<audio class=\"poodll_resourceplayer_' + skin + '\" style=\"display: none;\" ></audio>';\n                return resourceplayer;\n            },\n            fetch_resource_video: function (skin) {\n                var resourceplayer = '<video class=\"poodll_resourceplayer_' + skin + '\" style=\"display: none;\" playsinline=\"playsinline\"></video>';\n                return resourceplayer;\n            },\n            fetch_uploader_skin: function (controlbarid, element) {\n                var ip = this.fetch_instanceprops(controlbarid);\n                var upskin = upskin_bar.clone();\n                upskin.init(ip.config, element, ip.controlbar.progresscanvas, ip.controlbar.timer);\n                return upskin;\n            },\n\n            onMediaError: function (e) {\n                console.error('media error', e);\n            },\n\n            onMediaSuccess_video: function (controlbarid) {\n                var ip = this.fetch_instanceprops(controlbarid);\n                //clear messages\n                ip.uploader.Output('');\n\n                //set visuals\n                this.set_visual_mode('recordmode', controlbarid);\n                ip.controlbar.preview.attr('src', null);\n\n                //timer and status bar\n                ip.timer.reset();\n                ip.timer.start();\n                this.update_status(controlbarid);\n            },\n\n            onMediaSuccess_audio: function (controlbarid) {\n                var ip = this.fetch_instanceprops(controlbarid);\n\n                //clear messages\n                ip.uploader.Output('');\n\n                //set visuals\n                this.set_visual_mode('recordmode', controlbarid);\n\n                //timer and status bar\n                ip.timer.reset();\n                ip.timer.start();\n                this.update_status(controlbarid);\n\n            },\n\n            handle_timer_update: function (controlbarid) {\n                var ip = this.fetch_instanceprops(controlbarid);\n                ip.controlbar.status.html(ip.timer.fetch_display_time());\n                if (ip.timer.seconds == 0 && ip.timer.initseconds > 0) {\n                    ip.controlbar.stopbutton.click();\n                }\n            },\n\n            update_status: function (controlbarid) {\n                var ip = this.fetch_instanceprops(controlbarid);\n                ip.controlbar.status.html(ip.timer.fetch_display_time());\n            },\n\n            //set visuals for different states (ie recording or playing)\n            set_visual_mode: function (mode, controlbarid) {\n                var self = this;\n                var ip = this.fetch_instanceprops(controlbarid);\n\n                switch (mode) {\n\n                    case 'recordmode':\n                        ip.controlbar.progress.hide();\n                        self.disable_button(ip.controlbar.startbutton);\n                        self.disable_button(ip.controlbar.playbutton);\n                        ip.controlbar.resumebutton.hide();\n                        self.enable_button(ip.controlbar.stopbutton);\n                        self.focus_button(ip.controlbar.stopbutton);\n                        self.disable_button(ip.controlbar.savebutton);\n                        ip.controlbar.pausebutton.show();\n                        self.enable_button(ip.controlbar.pausebutton);\n\n                        ip.controlbar.preview.addClass('poodll_recording');\n                        ip.controlbar.status.addClass('poodll_recording');\n                        if (ip.config.mediatype == 'audio') {\n                            ip.controlbar.preview.hide();\n                        }\n                        ip.controlbar.status.show();\n                        break;\n\n                    case 'playingmode':\n                        self.disable_button(ip.controlbar.playbutton);\n                        self.enable_button(ip.controlbar.stopbutton);\n                        self.focus_button(ip.controlbar.stopbutton);\n                        self.disable_button(ip.controlbar.startbutton);\n                        self.disable_button(ip.controlbar.savebutton);\n                        ip.controlbar.progresscanvas.show();\n                        break;\n\n                    case 'previewmode':\n                        self.enable_button(ip.controlbar.playbutton);\n                        self.focus_button(ip.controlbar.playbutton);\n                        self.disable_button(ip.controlbar.pausebutton);\n                        self.disable_button(ip.controlbar.stopbutton);\n                        if (!self.uploaded) {\n                            self.enable_button(ip.controlbar.startbutton);\n                            self.enable_button(ip.controlbar.savebutton);\n                        }\n                        ip.controlbar.resumebutton.hide();\n                        ip.controlbar.pausebutton.show();\n                        ip.controlbar.preview.removeClass('poodll_recording');\n                        ip.controlbar.status.removeClass('poodll_recording');\n                        ip.controlbar.timer.html('00:00:00');\n                        ip.controlbar.progress.show();\n                        ip.controlbar.progresscanvas.hide();\n                        ip.controlbar.status.hide();\n                        break;\n\n                    case 'pausedmode':\n                        self.enable_button(ip.controlbar.resumebutton);\n                        self.focus_button(ip.controlbar.resumebutton);\n                        self.enable_button(ip.controlbar.savebutton);\n                        ip.controlbar.preview.removeClass('poodll_recording');\n                        ip.controlbar.status.removeClass('poodll_recording');\n\n                        break;\n\n\n                    case 'uploadingmode':\n\n                        self.disable_button(ip.controlbar.startbutton);\n                        ip.controlbar.progresscanvas.show();\n\n                        break;\n                }\n\n            },\n\n            //insert the control bar and return it to be reused\n            insert_controlbar_video: function (element, controlbarid, preview, resource) {\n                var controlbar = this.prepare_controlbar(element, controlbarid, preview, resource, 'video');\n                return controlbar;\n            },\n            //insert the control bar and return it to be reused\n            insert_controlbar_audio: function (element, controlbarid, preview, resource) {\n                var controlbar = this.prepare_controlbar(element, controlbarid, preview, resource, 'audio');\n                return controlbar;\n            },\n\n            //insert the control bar and return it to be reused\n            prepare_controlbar: function (element, controlbarid, preview, resource, mediatype) {\n                var ip = this.fetch_instanceprops(controlbarid);\n                var skin_style = ip.config.media_skin_style;\n\n                var recorder_class = mediatype == 'video' ? 'poodll_mediarecorder_video' : 'poodll_mediarecorder_audio';\n\n                var size_class = 'poodll_mediarecorder_size_auto';\n                switch (ip.config.size) {\n                    case 'small':\n                        size_class = 'poodll_mediarecorder_size_small';\n                        break;\n                    case 'big':\n                        size_class = 'poodll_mediarecorder_size_big';\n                        break;\n                    case 'auto':\n                        size_class = 'poodll_mediarecorder_size_auto';\n                }\n\n                var ss = this.pmr.fetch_strings();\n                var hideshowupload = ip.showupload ? 'inline-block' : 'none';\n                var controls = '<div class=\"poodll_mediarecorderholder_standard ' + recorder_class + ' ' + size_class + '\" id=\"holder_' + controlbarid + '\">';\n                controls += '<div class=\"poodll_mediarecorderbox_standard\" id=\"' + controlbarid + '\">';\n                controls += this.devsettings.fetch_dialogue_box();\n                controls += ip.downloaddialog.fetch_dialogue_box();\n                controls += ip.errordialog.fetch_dialogue_box();\n                controls += '<div class=\"style-holder ' + skin_style + '\">';\n                var status = this.fetch_status_bar('standard');\n                controls += status;\n                controls += '<div class=\"hp_slide\" id=\"slide_' + controlbarid + '\">';\n                controls += '<div class=\"hp_timer\"></div>';\n                controls += '<canvas class=\"hp_range\"></canvas>';\n                controls += '</div>';\n                controls += preview,\n                    controls += '<div class=\"settingsicon\" id=\"settingsicon_' + controlbarid + '\"><button type=\"button\" class=\"btn btn-info btn-lg\" data-toggle=\"modal\" data-target=\"#myModal\" aria-label=\"' + ss['recui_settings'] + '\"><i class=\"fa fa-cogs\" aria-hidden=\"true\"></i></button></div>';\n                controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_standard poodll_start-recording_standard\" aria-label=\"' + ss['recui_record'] + '\"  tabindex=\"0\">' + ss['recui_record'] + '</button>';\n                controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_standard poodll_stop-recording_standard pmr_disabled\" aria-label=\"' + ss['recui_stop'] + '\"  tabindex=\"0\" disabled>' + ss['recui_stop'] + '</button>';\n                controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_standard poodll_pause-recording_standard pmr_disabled\" aria-label=\"' + ss['recui_pause'] + '\"  tabindex=\"0\" disabled>' + ss['recui_pause'] + '</button>';\n                controls += ' <button type=\"button\" class=\"poodll_mediarecorder_button_standard poodll_resume-recording_standard pmr_disabled\" aria-label=\"' + ss['recui_resume'] + '\"  tabindex=\"0\" style=\"display: none;\" disabled>' + ss['recui_continue'] + '</button>';\n                controls += ' <button type=\"button\" class=\"poodll_mediarecorder_button_standard poodll_play-recording_standard pmr_disabled\" aria-label=\"' + ss['recui_play'] + '\"  tabindex=\"0\" disabled>' + ss['recui_play'] + '</button>';\n                controls += '<button type=\"button\" class=\"poodll_save-recording_standard pmr_disabled\" aria-label=\"' + ss['recui_upload'] + '\"  tabindex=\"0\" style=\"display: ' + hideshowupload + ';\" disabled>' + ss['recui_save'] + '</button>';\n                controls += '</div>';\n                controls += '</div>';\n                controls += '</div>';\n\n                $(element).prepend(controls);\n\n                var controlbar = {\n                    settingsdialog: $('#' + controlbarid + ' .poodll_dialogue_box_settings'),\n                    downloaddialog: $('#' + controlbarid + ' .poodll_dialogue_box_download'),\n                    errorsdialog: $('#' + controlbarid + ' .poodll_dialogue_box_errors'),\n                    settingsicon: $('#' + controlbarid + ' .settingsicon'),\n                    progresscanvas: $('#' + controlbarid + ' .hp_range'),\n                    progress: $('#' + controlbarid + ' .hp_slide'),\n                    timer: $('#' + controlbarid + ' .hp_timer'),\n                    status: $('#' + controlbarid + '  .poodll_status_standard'),\n                    preview: $('#' + controlbarid + '  .poodll_preview_standard'),\n                    startbutton: $('#' + controlbarid + '  .poodll_start-recording_standard'),\n                    stopbutton: $('#' + controlbarid + '  .poodll_stop-recording_standard'),\n                    pausebutton: $('#' + controlbarid + '  .poodll_pause-recording_standard'),\n                    resumebutton: $('#' + controlbarid + '  .poodll_resume-recording_standard'),\n                    playbutton: $('#' + controlbarid + '  .poodll_play-recording_standard'),\n                    savebutton: $('#' + controlbarid + '  .poodll_save-recording_standard')\n                };\n                //settings and error dialogs\n                //They use the same dialog and just fill it with different stuff\n                //settings is on 'this' because it is shown from skin events, but errors are from pmr stuff\n                ip.downloaddialog.set_dialogue_box(controlbar.downloaddialog);\n                ip.errordialog.set_dialogue_box(controlbar.errorsdialog);\n                this.devsettings.set_dialogue_box(controlbar.settingsdialog);\n\n                return controlbar;\n            }, //end of fetch_control_bar_standard\n\n\n            register_controlbar_events_video: function (onMediaSuccess, controlbarid) {\n                return this.register_controlbar_events_audio(onMediaSuccess, controlbarid);\n            },\n\n            register_controlbar_events_audio: function (onMediaSuccess, controlbarid) {\n                var self = this;\n                var pmr = this.pmr;\n                var ip = this.fetch_instanceprops(controlbarid);\n\n                //init linear progress\n                var hprogress = anim_progress_bar.clone();\n                hprogress.init(ip.controlbar.progresscanvas);\n\n\n                ip.controlbar.settingsicon.click(function () {\n                    if (!self.uploaded) {\n                        self.devsettings.open();\n                    } else {\n                        ip.downloaddialog.open();\n                    }\n                });\n\n                ip.controlbar.startbutton.click(function () {\n                    pmr.do_start_audio(ip, onMediaSuccess);\n                });\n\n                ip.controlbar.stopbutton.click(function () {\n\n                    var preview = ip.controlbar.preview;\n                    if (preview && preview.get(0)) {\n                        preview.get(0).pause();\n                    }\n\n                    pmr.do_stop_audio(ip);\n\n                    //timer and status bar\n                    ip.timer.stop();\n                    ip.timer.reset();\n                    self.update_status(controlbarid);\n                    //stop progress\n                    hprogress.stop();\n\n                    //do visuals\n                    self.set_visual_mode('previewmode', controlbarid);\n\n\n                });\n\n                ip.controlbar.pausebutton.click(function () {\n                    this.disabled = true;\n                    $(this).hide();\n                    ip.controlbar.resumebutton.show();\n                    pmr.do_pause_audio(ip);\n\n                    //timer and status bar\n                    ip.timer.pause();\n                    self.update_status(controlbarid);\n\n                    //do visuals\n                    self.set_visual_mode('pausedmode', controlbarid);\n                });\n\n                ip.controlbar.resumebutton.click(function () {\n\n                    pmr.do_resume_audio(ip);\n\n                    //timer and status bar\n                    ip.timer.resume();\n                    self.update_status(controlbarid);\n\n                    //do visuals\n                    self.set_visual_mode('recordmode', controlbarid);\n                });\n\n                ip.controlbar.playbutton.click(function () {\n\n                    var preview = ip.controlbar.preview.get(0);\n                    pmr.do_play_audio(ip, preview);\n\n                    ip.controlbar.preview.on('timeupdate', function () {\n                        if (!this.paused) {\n                            var currentTime = this.currentTime;\n                            ip.controlbar.timer.html(ip.timer.fetch_display_time(currentTime));\n                        }\n                    });\n\n                    //do visuals\n                    self.set_visual_mode('playingmode', controlbarid);\n\n                    //start animation\n                    hprogress.clear();\n                    hprogress.fetchCurrent = function () {\n                        var ct = ip.controlbar.preview.prop('currentTime');\n                        var duration = ip.controlbar.preview.prop('duration');\n                        if (!isFinite(duration)) {\n                            duration = ip.timer.finalseconds;\n                        }\n                        return ct / duration;\n                    };\n                    hprogress.start();\n\n                });\n\n                ip.controlbar.savebutton.click(function () {\n                    self.disable_button(this);\n                    if (ip.blobs && ip.blobs.length > 0) {\n                        pmr.do_save_audio(ip);\n                        self.uploaded = true;\n\n                        //do visuals\n                        self.set_visual_mode('uploadingmode', controlbarid);\n\n                    } else {\n                        ip.uploader.Output(M.util.get_string('recui_nothingtosaveerror', 'filter_poodll'));\n                    }//end of if self.blobs\t\t\n                    //probably not necessary  ... but getting odd ajax errors occasionally\n                    return false;\n                });//end of save recording\n\n                window.onbeforeunload = function () {\n                    self.enable_button(ip.controlbar.startbutton);\n                    var preview = ip.controlbar.preview;\n                    if (preview && preview.get(0)) {\n                        preview.get(0).pause();\n                    }\n                };\n            }, //end of register_control_bar_events_standard\n\n            enable_button: function (button) {\n                $(button).attr('disabled', false);\n                $(button).removeClass('pmr_disabled');\n            },\n            disable_button: function (button) {\n                $(button).attr('disabled', true);\n                $(button).addClass('pmr_disabled');\n            },\n            focus_button: function (button) {\n                $(button).focus();\n            },\n\n        };//end of returned object\n    });//total end\n"],"names":["define","$","log","utils","settings","anim_progress_bar","upskin_bar","debug","instanceprops","pmr","uploaded","devsettings","clone","extend","this","init","ip","fetch_instanceprops","onUploadSuccess","controlbarid","hide","show","onUploadFailure","fetch_status_bar","skin","fetch_preview_audio","fetch_preview_video","fetch_resource_audio","fetch_resource_video","fetch_uploader_skin","element","upskin","config","controlbar","progresscanvas","timer","onMediaError","e","console","error","onMediaSuccess_video","uploader","Output","set_visual_mode","preview","attr","reset","start","update_status","onMediaSuccess_audio","handle_timer_update","status","html","fetch_display_time","seconds","initseconds","stopbutton","click","mode","progress","disable_button","startbutton","playbutton","resumebutton","enable_button","focus_button","savebutton","pausebutton","addClass","mediatype","removeClass","insert_controlbar_video","resource","prepare_controlbar","insert_controlbar_audio","skin_style","media_skin_style","recorder_class","size_class","size","ss","fetch_strings","hideshowupload","showupload","controls","fetch_dialogue_box","downloaddialog","errordialog","prepend","settingsdialog","errorsdialog","settingsicon","set_dialogue_box","register_controlbar_events_video","onMediaSuccess","register_controlbar_events_audio","self","hprogress","open","do_start_audio","get","pause","do_stop_audio","stop","disabled","do_pause_audio","do_resume_audio","resume","do_play_audio","on","paused","currentTime","clear","fetchCurrent","ct","prop","duration","isFinite","finalseconds","blobs","length","do_save_audio","M","util","get_string","window","onbeforeunload","button","focus"],"mappings":"AACAA,4CAAO,CAAC,SAAS,WAAY,0BAA2B,mCAAoC,kCAAmC,6BAC3H,SAAUC,EAAGC,IAAKC,MAAOC,SAAUC,kBAAmBC,mBAIlDJ,IAAIK,MAAM,kCAEH,CAEHC,cAAe,KACfC,IAAK,KACLC,UAAU,EACVC,YAAa,KAGbC,MAAO,kBACIX,EAAEY,QAAO,EAAM,GAAIC,OAG9BC,KAAM,SAAUC,GAAIP,UACXD,cAAgBQ,QAChBP,IAAMA,SACNE,YAAcP,SAASQ,aACvBD,YAAYI,KAAKN,IAAKO,KAI/BC,oBAAqB,kBACVH,KAAKN,eAIhBU,gBAAiB,SAAUC,cACvBlB,EAAE,IAAMkB,aAAe,6BAA6BC,OAEpDnB,EAAE,IAAMkB,aAAe,gCAAgCE,QAG3DC,gBAAiB,SAAUH,gBAI3BI,iBAAkB,SAAUC,YACX,6BAA+BA,KAAO,6CAIvDC,oBAAqB,SAAUD,YACb,gCAAkCA,KAAO,iEAG3DE,oBAAqB,SAAUF,YACb,gCAAkCA,KAAO,iCAG3DG,qBAAsB,SAAUH,YACP,uCAAyCA,KAAO,sCAGzEI,qBAAsB,SAAUJ,YACP,uCAAyCA,KAAO,+DAGzEK,oBAAqB,SAAUV,aAAcW,aACrCd,GAAKF,KAAKG,oBAAoBE,cAC9BY,OAASzB,WAAWM,eACxBmB,OAAOhB,KAAKC,GAAGgB,OAAQF,QAASd,GAAGiB,WAAWC,eAAgBlB,GAAGiB,WAAWE,OACrEJ,QAGXK,aAAc,SAAUC,GACpBC,QAAQC,MAAM,cAAeF,IAGjCG,qBAAsB,SAAUrB,kBACxBH,GAAKF,KAAKG,oBAAoBE,cAElCH,GAAGyB,SAASC,OAAO,SAGdC,gBAAgB,aAAcxB,cACnCH,GAAGiB,WAAWW,QAAQC,KAAK,MAAO,MAGlC7B,GAAGmB,MAAMW,QACT9B,GAAGmB,MAAMY,aACJC,cAAc7B,eAGvB8B,qBAAsB,SAAU9B,kBACxBH,GAAKF,KAAKG,oBAAoBE,cAGlCH,GAAGyB,SAASC,OAAO,SAGdC,gBAAgB,aAAcxB,cAGnCH,GAAGmB,MAAMW,QACT9B,GAAGmB,MAAMY,aACJC,cAAc7B,eAIvB+B,oBAAqB,SAAU/B,kBACvBH,GAAKF,KAAKG,oBAAoBE,cAClCH,GAAGiB,WAAWkB,OAAOC,KAAKpC,GAAGmB,MAAMkB,sBACX,GAApBrC,GAAGmB,MAAMmB,SAAgBtC,GAAGmB,MAAMoB,YAAc,GAChDvC,GAAGiB,WAAWuB,WAAWC,SAIjCT,cAAe,SAAU7B,kBACjBH,GAAKF,KAAKG,oBAAoBE,cAClCH,GAAGiB,WAAWkB,OAAOC,KAAKpC,GAAGmB,MAAMkB,uBAIvCV,gBAAiB,SAAUe,KAAMvC,kBAEzBH,GAAKF,KAAKG,oBAAoBE,qBAE1BuC,UAEC,aACD1C,GAAGiB,WAAW0B,SAASvC,OANpBN,KAOE8C,eAAe5C,GAAGiB,WAAW4B,aAP/B/C,KAQE8C,eAAe5C,GAAGiB,WAAW6B,YAClC9C,GAAGiB,WAAW8B,aAAa3C,OATxBN,KAUEkD,cAAchD,GAAGiB,WAAWuB,YAV9B1C,KAWEmD,aAAajD,GAAGiB,WAAWuB,YAX7B1C,KAYE8C,eAAe5C,GAAGiB,WAAWiC,YAClClD,GAAGiB,WAAWkC,YAAY9C,OAbvBP,KAcEkD,cAAchD,GAAGiB,WAAWkC,aAEjCnD,GAAGiB,WAAWW,QAAQwB,SAAS,oBAC/BpD,GAAGiB,WAAWkB,OAAOiB,SAAS,oBACH,SAAvBpD,GAAGgB,OAAOqC,WACVrD,GAAGiB,WAAWW,QAAQxB,OAE1BJ,GAAGiB,WAAWkB,OAAO9B,iBAGpB,cAxBEP,KAyBE8C,eAAe5C,GAAGiB,WAAW6B,YAzB/BhD,KA0BEkD,cAAchD,GAAGiB,WAAWuB,YA1B9B1C,KA2BEmD,aAAajD,GAAGiB,WAAWuB,YA3B7B1C,KA4BE8C,eAAe5C,GAAGiB,WAAW4B,aA5B/B/C,KA6BE8C,eAAe5C,GAAGiB,WAAWiC,YAClClD,GAAGiB,WAAWC,eAAeb,iBAG5B,cAjCEP,KAkCEkD,cAAchD,GAAGiB,WAAW6B,YAlC9BhD,KAmCEmD,aAAajD,GAAGiB,WAAW6B,YAnC7BhD,KAoCE8C,eAAe5C,GAAGiB,WAAWkC,aApC/BrD,KAqCE8C,eAAe5C,GAAGiB,WAAWuB,YArC/B1C,KAsCOJ,WAtCPI,KAuCMkD,cAAchD,GAAGiB,WAAW4B,aAvClC/C,KAwCMkD,cAAchD,GAAGiB,WAAWiC,aAErClD,GAAGiB,WAAW8B,aAAa3C,OAC3BJ,GAAGiB,WAAWkC,YAAY9C,OAC1BL,GAAGiB,WAAWW,QAAQ0B,YAAY,oBAClCtD,GAAGiB,WAAWkB,OAAOmB,YAAY,oBACjCtD,GAAGiB,WAAWE,MAAMiB,KAAK,YACzBpC,GAAGiB,WAAW0B,SAAStC,OACvBL,GAAGiB,WAAWC,eAAed,OAC7BJ,GAAGiB,WAAWkB,OAAO/B,iBAGpB,aApDEN,KAqDEkD,cAAchD,GAAGiB,WAAW8B,cArD9BjD,KAsDEmD,aAAajD,GAAGiB,WAAW8B,cAtD7BjD,KAuDEkD,cAAchD,GAAGiB,WAAWiC,YACjClD,GAAGiB,WAAWW,QAAQ0B,YAAY,oBAClCtD,GAAGiB,WAAWkB,OAAOmB,YAAY,8BAKhC,gBA9DExD,KAgEE8C,eAAe5C,GAAGiB,WAAW4B,aAClC7C,GAAGiB,WAAWC,eAAeb,SAQzCkD,wBAAyB,SAAUzC,QAASX,aAAcyB,QAAS4B,iBAC9C1D,KAAK2D,mBAAmB3C,QAASX,aAAcyB,QAAS4B,SAAU,UAIvFE,wBAAyB,SAAU5C,QAASX,aAAcyB,QAAS4B,iBAC9C1D,KAAK2D,mBAAmB3C,QAASX,aAAcyB,QAAS4B,SAAU,UAKvFC,mBAAoB,SAAU3C,QAASX,aAAcyB,QAAS4B,SAAUH,eAChErD,GAAKF,KAAKG,oBAAoBE,cAC9BwD,WAAa3D,GAAGgB,OAAO4C,iBAEvBC,eAA8B,SAAbR,UAAuB,6BAA+B,6BAEvES,WAAa,wCACT9D,GAAGgB,OAAO+C,UACT,QACDD,WAAa,4CAEZ,MACDA,WAAa,0CAEZ,OACDA,WAAa,qCAGjBE,GAAKlE,KAAKL,IAAIwE,gBACdC,eAAiBlE,GAAGmE,WAAa,eAAiB,OAClDC,SAAW,mDAAqDP,eAAiB,IAAMC,WAAa,gBAAkB3D,aAAe,KACzIiE,UAAY,qDAAuDjE,aAAe,KAClFiE,UAAYtE,KAAKH,YAAY0E,qBAC7BD,UAAYpE,GAAGsE,eAAeD,qBAC9BD,UAAYpE,GAAGuE,YAAYF,qBAC3BD,UAAY,4BAA8BT,WAAa,KAEvDS,UADatE,KAAKS,iBAAiB,YAEnC6D,UAAY,mCAAqCjE,aAAe,KAChEiE,UAAY,+BACZA,UAAY,qCACZA,UAAY,SACZA,UAAYxC,QACRwC,UAAY,8CAAgDjE,aAAe,8GAAgH6D,GAAE,eAAqB,iEACtNI,UAAY,kHAAoHJ,GAAE,aAAmB,mBAAqBA,GAAE,aAAmB,YAC/LI,UAAY,8HAAgIJ,GAAE,WAAiB,4BAA8BA,GAAE,WAAiB,YAChNI,UAAY,+HAAiIJ,GAAE,YAAkB,4BAA8BA,GAAE,YAAkB,YACnNI,UAAY,iIAAmIJ,GAAE,aAAmB,mDAAqDA,GAAE,eAAqB,YAChPI,UAAY,+HAAiIJ,GAAE,WAAiB,4BAA8BA,GAAE,WAAiB,YACjNI,UAAY,yFAA2FJ,GAAE,aAAmB,mCAAqCE,eAAiB,eAAiBF,GAAE,WAAiB,YACtNI,UAAY,SACZA,UAAY,SACZA,UAAY,SAEZnF,EAAE6B,SAAS0D,QAAQJ,cAEfnD,WAAa,CACbwD,eAAgBxF,EAAE,IAAMkB,aAAe,kCACvCmE,eAAgBrF,EAAE,IAAMkB,aAAe,kCACvCuE,aAAczF,EAAE,IAAMkB,aAAe,gCACrCwE,aAAc1F,EAAE,IAAMkB,aAAe,kBACrCe,eAAgBjC,EAAE,IAAMkB,aAAe,cACvCwC,SAAU1D,EAAE,IAAMkB,aAAe,cACjCgB,MAAOlC,EAAE,IAAMkB,aAAe,cAC9BgC,OAAQlD,EAAE,IAAMkB,aAAe,6BAC/ByB,QAAS3C,EAAE,IAAMkB,aAAe,8BAChC0C,YAAa5D,EAAE,IAAMkB,aAAe,sCACpCqC,WAAYvD,EAAE,IAAMkB,aAAe,qCACnCgD,YAAalE,EAAE,IAAMkB,aAAe,sCACpC4C,aAAc9D,EAAE,IAAMkB,aAAe,uCACrC2C,WAAY7D,EAAE,IAAMkB,aAAe,qCACnC+C,WAAYjE,EAAE,IAAMkB,aAAe,6CAKvCH,GAAGsE,eAAeM,iBAAiB3D,WAAWqD,gBAC9CtE,GAAGuE,YAAYK,iBAAiB3D,WAAWyD,mBACtC/E,YAAYiF,iBAAiB3D,WAAWwD,gBAEtCxD,YAIX4D,iCAAkC,SAAUC,eAAgB3E,qBACjDL,KAAKiF,iCAAiCD,eAAgB3E,eAGjE4E,iCAAkC,SAAUD,eAAgB3E,kBACpD6E,KAAOlF,KACPL,IAAMK,KAAKL,IACXO,GAAKF,KAAKG,oBAAoBE,cAG9B8E,UAAY5F,kBAAkBO,QAClCqF,UAAUlF,KAAKC,GAAGiB,WAAWC,gBAG7BlB,GAAGiB,WAAW0D,aAAalC,OAAM,WACxBuC,KAAKtF,SAGNM,GAAGsE,eAAeY,OAFlBF,KAAKrF,YAAYuF,UAMzBlF,GAAGiB,WAAW4B,YAAYJ,OAAM,WAC5BhD,IAAI0F,eAAenF,GAAI8E,mBAG3B9E,GAAGiB,WAAWuB,WAAWC,OAAM,eAEvBb,QAAU5B,GAAGiB,WAAWW,QACxBA,SAAWA,QAAQwD,IAAI,IACvBxD,QAAQwD,IAAI,GAAGC,QAGnB5F,IAAI6F,cAActF,IAGlBA,GAAGmB,MAAMoE,OACTvF,GAAGmB,MAAMW,QACTkD,KAAKhD,cAAc7B,cAEnB8E,UAAUM,OAGVP,KAAKrD,gBAAgB,cAAexB,iBAKxCH,GAAGiB,WAAWkC,YAAYV,OAAM,gBACvB+C,UAAW,EAChBvG,EAAEa,MAAMM,OACRJ,GAAGiB,WAAW8B,aAAa1C,OAC3BZ,IAAIgG,eAAezF,IAGnBA,GAAGmB,MAAMkE,QACTL,KAAKhD,cAAc7B,cAGnB6E,KAAKrD,gBAAgB,aAAcxB,iBAGvCH,GAAGiB,WAAW8B,aAAaN,OAAM,WAE7BhD,IAAIiG,gBAAgB1F,IAGpBA,GAAGmB,MAAMwE,SACTX,KAAKhD,cAAc7B,cAGnB6E,KAAKrD,gBAAgB,aAAcxB,iBAGvCH,GAAGiB,WAAW6B,WAAWL,OAAM,eAEvBb,QAAU5B,GAAGiB,WAAWW,QAAQwD,IAAI,GACxC3F,IAAImG,cAAc5F,GAAI4B,SAEtB5B,GAAGiB,WAAWW,QAAQiE,GAAG,cAAc,eAC9B/F,KAAKgG,OAAQ,KACVC,YAAcjG,KAAKiG,YACvB/F,GAAGiB,WAAWE,MAAMiB,KAAKpC,GAAGmB,MAAMkB,mBAAmB0D,kBAK7Df,KAAKrD,gBAAgB,cAAexB,cAGpC8E,UAAUe,QACVf,UAAUgB,aAAe,eACjBC,GAAKlG,GAAGiB,WAAWW,QAAQuE,KAAK,eAChCC,SAAWpG,GAAGiB,WAAWW,QAAQuE,KAAK,mBACrCE,SAASD,YACVA,SAAWpG,GAAGmB,MAAMmF,cAEjBJ,GAAKE,UAEhBnB,UAAUlD,WAId/B,GAAGiB,WAAWiC,WAAWT,OAAM,kBAC3BuC,KAAKpC,eAAe9C,MAChBE,GAAGuG,OAASvG,GAAGuG,MAAMC,OAAS,GAC9B/G,IAAIgH,cAAczG,IAClBgF,KAAKtF,UAAW,EAGhBsF,KAAKrD,gBAAgB,gBAAiBxB,eAGtCH,GAAGyB,SAASC,OAAOgF,EAAEC,KAAKC,WAAW,2BAA4B,mBAG9D,KAGXC,OAAOC,eAAiB,WACpB9B,KAAKhC,cAAchD,GAAGiB,WAAW4B,iBAC7BjB,QAAU5B,GAAGiB,WAAWW,QACxBA,SAAWA,QAAQwD,IAAI,IACvBxD,QAAQwD,IAAI,GAAGC,UAK3BrC,cAAe,SAAU+D,QACrB9H,EAAE8H,QAAQlF,KAAK,YAAY,GAC3B5C,EAAE8H,QAAQzD,YAAY,iBAE1BV,eAAgB,SAAUmE,QACtB9H,EAAE8H,QAAQlF,KAAK,YAAY,GAC3B5C,EAAE8H,QAAQ3D,SAAS,iBAEvBH,aAAc,SAAU8D,QACpB9H,EAAE8H,QAAQC"}