diff --git a/assets/js/game.js b/assets/js/game.js
index 07b4c6d..dff9432 100644
--- a/assets/js/game.js
+++ b/assets/js/game.js
@@ -1,398 +1 @@
-'use strict';
-
-var map;
-var resultmap;
-var markers = [];
-var guess_coordinates = [];
-var true_location = [];
-
-var accumulated_distance = 0;
-var current_name = '';
-var distance_from_guess = [];
-var check_count = 0;
-
-var choiceLocation = "HN"
-
-
-const boundingBoxVN = {
- HN: [105.7700, 20.9600, 105.8800, 21.0500, 0.003], // Hà Nội
- TPHCM: [106.6200, 10.7100, 106.7500, 10.8300, 0.005], // TP. Hồ Chí Minh
- HP: [106.6500, 20.8000, 106.7500, 20.9000, 0.05], // Trung tâm Hải Phòng
- ND: [106.0000, 20.3500, 106.2500, 20.5000, 0.005],
- DN: [108.1700, 16.0000, 108.2500, 16.1000, 0.005], // Đà Nẵng
-};
-
-var minLat = boundingBoxVN[choiceLocation][1];
-var maxLat = boundingBoxVN[choiceLocation][3];
-var minLong = boundingBoxVN[choiceLocation][0];
-var maxLong = boundingBoxVN[choiceLocation][2];
-
-var delta = boundingBoxVN[choiceLocation][4];
-
-const accessToken = 'MLY|24113623194974280|5bf83fa202912f1cc3210b2cf968fb65';
-
-async function getRandomMapillaryImage() {
-
- // Generate a random point within the defined area
- const randomLat = (Math.random() * (maxLat - minLat) + minLat);
- const randomLng = (Math.random() * (maxLong - minLong) + minLong);
-
- const bbox = [
- (randomLng - delta).toFixed(4),
- (randomLat - delta).toFixed(4),
- (randomLng + delta).toFixed(4),
- (randomLat + delta).toFixed(4)
- ].join(',');
-
- const url = `https://graph.mapillary.com/images?access_token=${accessToken}&fields=id,thumb_original_url,geometry,is_pano&limit=3&bbox=${bbox}&is_pano=true`;
- try {
- console.log('Fetching panoramic image...');
- const res = await fetch(url);
- const data = await res.json();
- if (data.data && data.data.length > 0) {
- // Filter for panoramic images first
- const panoramicImages = data.data.filter(img => img.is_pano);
- const image = panoramicImages.length > 0 ? panoramicImages[Math.floor(Math.random() * panoramicImages.length)] : data.data[0];
-
- console.log('Image fetched successfully');
- return {
- lat: image.geometry.coordinates[1],
- lng: image.geometry.coordinates[0],
- url: image.thumb_original_url,
- id: image.id,
- isPano: image.is_pano || false
- };
- } else {
- console.log('No images found, retrying...');
- return getRandomMapillaryImage();
- }
- } catch (error) {
- console.error('Error fetching image:', error);
- // Show error in loading area
- document.getElementById('pano').innerHTML = `
-
-
-
⚠️ Error loading image
-
Retrying...
-
-
- `;
- // Retry after a short delay
- setTimeout(() => getRandomMapillaryImage(), 2000);
- }
-}
-
-function checkLibrariesLoaded() {
- return new Promise((resolve) => {
- const checkInterval = setInterval(() => {
- if (window.L && window.PhotoSphereViewer) {
- clearInterval(checkInterval);
- resolve();
- }
- }, 100);
- });
-}
-
-function showLoading() {
- document.getElementById('pano').innerHTML = `
-
- `;
-
- // Add CSS animation for spinner
- if (!document.getElementById('loading-styles')) {
- const style = document.createElement('style');
- style.id = 'loading-styles';
- style.textContent = `
- @keyframes spin {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
- }
- `;
- document.head.appendChild(style);
- }
-}
-
-function hideLoading() {
- // Remove loading indicator
- const panoElement = document.getElementById('pano');
- if (panoElement && panoElement.innerHTML.includes('Loading image...')) {
- panoElement.innerHTML = '';
- }
-}
-
-function initialize() {
- check_count = 0;
- disableButton('check');
-
- // Show loading indicator
- showLoading();
-
- getRandomMapillaryImage().then(image => {
- if (!image) return location.reload();
- true_location = [image.lat, image.lng];
- current_name = "VIET NAM";
- document.getElementById('pano').innerHTML = ""; // Clear any existing content
-
- try {
- if (window.PhotoSphereViewer && window.PhotoSphereViewer.Viewer) {
- // Hide loading before initializing viewer
- hideLoading();
-
- const viewer = new PhotoSphereViewer.Viewer({
- container: document.getElementById('pano'),
- panorama: image.url,
- loadingImg: null,
- defaultYaw: 0,
- defaultZoomLvl: -96,
- navbar: [
- 'zoom',
- 'fullscreen'
- ],
- mousewheel: false,
- touchmoveTwoFingers: true,
- });
-
- // Add event listeners for loading states
- viewer.addEventListener('ready', () => {
- console.log('Photo Sphere Viewer loaded successfully');
- });
-
- viewer.addEventListener('panorama-loaded', () => {
- console.log('Panorama image loaded');
- });
-
- viewer.addEventListener('panorama-error', (error) => {
- console.error('Error loading panorama:', error);
- // Fallback to regular image on panorama load error
- hideLoading();
- document.getElementById('pano').innerHTML = ` `;
- });
-
- } else {
- console.warn('PhotoSphereViewer not available, using fallback image');
- hideLoading();
- document.getElementById('pano').innerHTML = ` `;
- }
- } catch (error) {
- console.error('Error initializing Photo Sphere Viewer:', error);
- // Fallback to regular image
- hideLoading();
- document.getElementById('pano').innerHTML = ` `;
- }
-
-
- map = L.map('map').setView([(minLat + maxLat) / 2, (minLong + maxLong) / 2], 10);
- L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
- maxZoom: 19,
- }).addTo(map);
-
- map.on('click', function(e) {
- deleteMarkers();
- guess_coordinates = [e.latlng.lat, e.latlng.lng];
- const marker = L.marker(e.latlng).addTo(map);
- markers.push(marker);
- if (check_count === 0) {
- enableButton('check');
- check_count += 1;
- }
- });
- }).catch(error => {
- console.error('Error in initialize function:', error);
- document.getElementById('pano').innerHTML = `
-
-
-
⚠️ Failed to load
-
Retry
-
-
- `;
- });
-}
-
-function clearMarkers() {
- for (let i = 0; i < markers.length; i++) {
- map.removeLayer(markers[i]);
- }
- markers = [];
-}
-
-function deleteMarkers() {
- clearMarkers();
-}
-
-function continueGame() {
- var resModal = new bootstrap.Modal(document.getElementById('resultModal'));
- resModal.hide();
- location.reload();
-}
-
-function check() {
- distance_from_guess = [];
- var guess_error = distance(guess_coordinates[0], guess_coordinates[1], true_location[0], true_location[1], 'M');
- accumulated_distance += parseFloat(guess_error);
- distance_from_guess = guess_error;
-
- showResultModal(distance_from_guess);
-
- disableButton('check');
-}
-
-function distance(lat1, lon1, lat2, lon2, unit) {
- if ((lat1 == lat2) && (lon1 == lon2)) {
- return 0;
- } else {
- var radlat1 = Math.PI * lat1 / 180;
- var radlat2 = Math.PI * lat2 / 180;
- var theta = lon1 - lon2;
- var radtheta = Math.PI * theta / 180;
- var dist = Math.sin(radlat1) * Math.sin(radlat2) +
- Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
-
- if (dist > 1) dist = 1;
-
- dist = Math.acos(dist);
- dist = dist * 180 / Math.PI;
- dist = dist * 60 * 1.1515;
-
- if (unit == "K") dist = dist * 1.609344;
- if (unit == "N") dist = dist * 0.8684;
-
- dist = dist * 1609.34;
- return dist.toFixed(1);
- }
-}
-
-function display_location() {
- const scoreText = document.getElementById("score");
- if (distance_from_guess > 1000)
- scoreText.innerHTML = `Hmm! Your distance is ${distance_from_guess}m away.`;
- else if (distance_from_guess > 200)
- scoreText.innerHTML = `Good job! Your distance is ${distance_from_guess}m away.`;
- else
- scoreText.innerHTML = `Excellent! Your distance is ${distance_from_guess}m away.`;
-}
-
-function disableButton(id) {
- document.getElementById(id).disabled = true;
-}
-
-function enableButton(id) {
- document.getElementById(id).disabled = false;
-}
-
-function showResultModal(distanceKm) {
- const modal = document.getElementById("resultModal");
- const scoreText = document.getElementById("resultText");
- const distanceText = document.getElementById("distance-guess");
-
- if (distance_from_guess > 1000)
- distanceText.innerHTML = `${(distance_from_guess / 1000).toFixed(2)} KM`;
- else
- distanceText.innerHTML = `${distance_from_guess} M`;
- // Update the score text
- if (distance_from_guess > 1000)
- scoreText.innerHTML = `Hmm! Nice try.`;
- else if (distance_from_guess > 200)
- scoreText.innerHTML = `Good job!`;
- else
- scoreText.innerHTML = `Excellent!`;
-
- // Show the modal
- modal.style.display = "block";
-
- // Create the result map
- createResultMap();
-}
-
-function createResultMap() {
- // Clear any existing map
- const resultContainer = document.getElementById('result');
- resultContainer.innerHTML = '';
-
- var result_map = L.map('result').setView(true_location, 12);
- L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
- maxZoom: 19,
- }).addTo(result_map);
-
- // Invalidate map size to ensure proper rendering
- setTimeout(() => {
- result_map.invalidateSize();
- }, 100);
-
- const true_marker = L.marker(true_location, {
- icon: L.icon({
- iconUrl: 'https://maps.google.com/mapfiles/ms/icons/green-dot.png',
- iconSize: [32, 32],
- })
- }).addTo(result_map).bindPopup(current_name);
-
- const guess_marker = L.marker(guess_coordinates, {
- icon: L.icon({
- iconUrl: 'https://maps.google.com/mapfiles/ms/icons/red-dot.png',
- iconSize: [32, 32],
- })
- }).addTo(result_map).bindPopup("Your Guess");
-
- const polyline = L.polyline([true_location, guess_coordinates], { color: 'blue', dashArray: '5, 10' }).addTo(result_map);
-
- // Fit map to show both markers
- const group = new L.featureGroup([true_marker, guess_marker]);
- result_map.fitBounds(group.getBounds().pad(0.1));
-}
-
-function closeResultModal() {
- document.getElementById("resultModal").style.display = "none";
-}
-
-
-function nextRound() {
- closeResultModal();
- // Logic để reset game hoặc sang round tiếp theo
- location.reload();
-}
-
-function goBack() {
- // Logic để quay lại trang chính hoặc trang lựa chọn
- window.location.href = '/';
-}
-
-
-function showDonateModal() {
- const modal = document.getElementById("donateModal");
-
- // Show the modal
- modal.style.display = "block";
-
-}
-
-function closeDonate() {
- const modal = document.getElementById("donateModal");
- // Hide the modal
- modal.style.display = "none";
- // Optionally, you can reset the game or perform other actions
-}
-
-
-window.onload = function () {
- // Get location parameter from URL before initializing
- const params = new URLSearchParams(window.location.search);
- const locationParam = params.get("location");
- if (locationParam) {
- choiceLocation = locationParam;
- }
- minLat = boundingBoxVN[choiceLocation][1];
- maxLat = boundingBoxVN[choiceLocation][3];
- minLong = boundingBoxVN[choiceLocation][0];
- maxLong = boundingBoxVN[choiceLocation][2];
- delta = boundingBoxVN[choiceLocation][4];
-
- checkLibrariesLoaded().then(() => {
- initialize();
- });
-};
-
+'use strict';const _0x2f3f3d=_0x522a;(function(_0x28c52f,_0x241c32){const _0x6471a4=_0x522a,_0x10f607=_0x28c52f();while(!![]){try{const _0x49c61a=-parseInt(_0x6471a4(0x1af))/0x1+-parseInt(_0x6471a4(0x1db))/0x2*(parseInt(_0x6471a4(0x1b4))/0x3)+parseInt(_0x6471a4(0x1b7))/0x4+parseInt(_0x6471a4(0x198))/0x5+parseInt(_0x6471a4(0x1cc))/0x6+parseInt(_0x6471a4(0x19e))/0x7+parseInt(_0x6471a4(0x1a6))/0x8;if(_0x49c61a===_0x241c32)break;else _0x10f607['push'](_0x10f607['shift']());}catch(_0xcf1bba){_0x10f607['push'](_0x10f607['shift']());}}}(_0x4cf1,0x5c6ed));var map,resultmap,markers=[],guess_coordinates=[],true_location=[],accumulated_distance=0x0,current_name='',distance_from_guess=[],check_count=0x0,choiceLocation='HN';const boundingBoxVN={'HN':[105.77,20.96,105.88,21.05,0.003],'TPHCM':[106.62,10.71,106.75,10.83,0.005],'HP':[106.65,20.8,106.75,20.9,0.05],'ND':[0x6a,20.35,106.25,20.5,0.005],'DN':[108.17,0x10,108.25,16.1,0.005]};var minLat=boundingBoxVN[choiceLocation][0x1],maxLat=boundingBoxVN[choiceLocation][0x3],minLong=boundingBoxVN[choiceLocation][0x0],maxLong=boundingBoxVN[choiceLocation][0x2],delta=boundingBoxVN[choiceLocation][0x4];const accessToken='MLY|24113623194974280|5bf83fa202912f1cc3210b2cf968fb65';async function getRandomMapillaryImage(){const _0x4eb278=_0x522a,_0x1e5b33=Math[_0x4eb278(0x1cd)]()*(maxLat-minLat)+minLat,_0x211128=Math[_0x4eb278(0x1cd)]()*(maxLong-minLong)+minLong,_0x2454d8=[(_0x211128-delta)[_0x4eb278(0x18c)](0x4),(_0x1e5b33-delta)['toFixed'](0x4),(_0x211128+delta)[_0x4eb278(0x18c)](0x4),(_0x1e5b33+delta)[_0x4eb278(0x18c)](0x4)][_0x4eb278(0x1c0)](','),_0x514f4a=_0x4eb278(0x1de)+accessToken+'&fields=id,thumb_original_url,geometry,is_pano&limit=3&bbox='+_0x2454d8+'&is_pano=true';try{console['log'](_0x4eb278(0x1e8));const _0x36adbf=await fetch(_0x514f4a),_0x5e2489=await _0x36adbf[_0x4eb278(0x1c9)]();if(_0x5e2489['data']&&_0x5e2489['data']['length']>0x0){const _0x20dd30=_0x5e2489['data'][_0x4eb278(0x190)](_0x5bcfd5=>_0x5bcfd5[_0x4eb278(0x18a)]),_0x2e6a28=_0x20dd30[_0x4eb278(0x1ab)]>0x0?_0x20dd30[Math[_0x4eb278(0x186)](Math[_0x4eb278(0x1cd)]()*_0x20dd30[_0x4eb278(0x1ab)])]:_0x5e2489[_0x4eb278(0x1cf)][0x0];return console[_0x4eb278(0x1a1)](_0x4eb278(0x1ca)),{'lat':_0x2e6a28[_0x4eb278(0x189)][_0x4eb278(0x1b1)][0x1],'lng':_0x2e6a28[_0x4eb278(0x189)][_0x4eb278(0x1b1)][0x0],'url':_0x2e6a28['thumb_original_url'],'id':_0x2e6a28['id'],'isPano':_0x2e6a28[_0x4eb278(0x18a)]||![]};}else return console[_0x4eb278(0x1a1)](_0x4eb278(0x1c7)),getRandomMapillaryImage();}catch(_0x498c14){console['error']('Error\x20fetching\x20image:',_0x498c14),document[_0x4eb278(0x1b0)](_0x4eb278(0x1e1))[_0x4eb278(0x19d)]=_0x4eb278(0x1aa),setTimeout(()=>getRandomMapillaryImage(),0x7d0);}}function checkLibrariesLoaded(){return new Promise(_0x5b45ac=>{const _0x53b944=setInterval(()=>{window['L']&&window['PhotoSphereViewer']&&(clearInterval(_0x53b944),_0x5b45ac());},0x64);});}function showLoading(){const _0x5a4801=_0x522a;document['getElementById'](_0x5a4801(0x1e1))[_0x5a4801(0x19d)]=_0x5a4801(0x1c5);if(!document[_0x5a4801(0x1b0)]('loading-styles')){const _0x54e63f=document[_0x5a4801(0x1a9)](_0x5a4801(0x1e2));_0x54e63f['id']=_0x5a4801(0x1e7),_0x54e63f['textContent']=_0x5a4801(0x1cb),document['head'][_0x5a4801(0x199)](_0x54e63f);}}function hideLoading(){const _0x37fc0f=_0x522a,_0x336799=document['getElementById'](_0x37fc0f(0x1e1));_0x336799&&_0x336799[_0x37fc0f(0x19d)][_0x37fc0f(0x1b3)](_0x37fc0f(0x1c1))&&(_0x336799[_0x37fc0f(0x19d)]='');}function initialize(){const _0x5f0fbe=_0x522a;check_count=0x0,disableButton(_0x5f0fbe(0x1ba)),showLoading(),getRandomMapillaryImage()[_0x5f0fbe(0x1c6)](_0x322477=>{const _0x20a7c9=_0x5f0fbe;if(!_0x322477)return location[_0x20a7c9(0x1bb)]();true_location=[_0x322477[_0x20a7c9(0x1c8)],_0x322477['lng']],current_name=_0x20a7c9(0x19b),document['getElementById'](_0x20a7c9(0x1e1))[_0x20a7c9(0x19d)]='';try{if(window[_0x20a7c9(0x1dc)]&&window[_0x20a7c9(0x1dc)][_0x20a7c9(0x1df)]){hideLoading();const _0x106e35=new PhotoSphereViewer[(_0x20a7c9(0x1df))]({'container':document[_0x20a7c9(0x1b0)](_0x20a7c9(0x1e1)),'panorama':_0x322477['url'],'loadingImg':null,'defaultYaw':0x0,'defaultZoomLvl':-0x60,'navbar':[_0x20a7c9(0x1bc),_0x20a7c9(0x1a5)],'mousewheel':!![],'touchmoveTwoFingers':!![]});_0x106e35[_0x20a7c9(0x1c4)]('ready',()=>{const _0x2b61e9=_0x20a7c9;console['log'](_0x2b61e9(0x1e3));}),_0x106e35[_0x20a7c9(0x1c4)](_0x20a7c9(0x1ad),()=>{const _0x318013=_0x20a7c9;console[_0x318013(0x1a1)](_0x318013(0x1d0));}),_0x106e35['addEventListener']('panorama-error',_0x1c0c5c=>{const _0x61576b=_0x20a7c9;console['error'](_0x61576b(0x1ce),_0x1c0c5c),hideLoading(),document[_0x61576b(0x1b0)]('pano')[_0x61576b(0x19d)]=_0x61576b(0x19c)+_0x322477[_0x61576b(0x18b)]+'\x22\x20style=\x22width:100%;\x20height:100%;\x20object-fit:cover;\x20border-radius:10px;\x22\x20/>';});}else console[_0x20a7c9(0x1b6)](_0x20a7c9(0x1a3)),hideLoading(),document[_0x20a7c9(0x1b0)]('pano')[_0x20a7c9(0x19d)]=' ';}catch(_0x5772f5){console[_0x20a7c9(0x1d3)](_0x20a7c9(0x197),_0x5772f5),hideLoading(),document[_0x20a7c9(0x1b0)](_0x20a7c9(0x1e1))[_0x20a7c9(0x19d)]=_0x20a7c9(0x19c)+_0x322477['url']+_0x20a7c9(0x194);}map=L[_0x20a7c9(0x1a8)](_0x20a7c9(0x1a8))[_0x20a7c9(0x1b9)]([(minLat+maxLat)/0x2,(minLong+maxLong)/0x2],0xa),L[_0x20a7c9(0x1d5)](_0x20a7c9(0x182),{'maxZoom':0x13})[_0x20a7c9(0x19f)](map),map['on']('click',function(_0x40567a){const _0xc2a507=_0x20a7c9;deleteMarkers(),guess_coordinates=[_0x40567a['latlng']['lat'],_0x40567a[_0xc2a507(0x1e4)][_0xc2a507(0x1be)]];const _0x4c4f9b=L[_0xc2a507(0x1c2)](_0x40567a[_0xc2a507(0x1e4)])[_0xc2a507(0x19f)](map);markers[_0xc2a507(0x1d8)](_0x4c4f9b),check_count===0x0&&(enableButton(_0xc2a507(0x1ba)),check_count+=0x1);});})[_0x5f0fbe(0x183)](_0x59af69=>{const _0x49ad80=_0x5f0fbe;console[_0x49ad80(0x1d3)](_0x49ad80(0x1b5),_0x59af69),document[_0x49ad80(0x1b0)](_0x49ad80(0x1e1))[_0x49ad80(0x19d)]='\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
⚠️\x20Failed\x20to\x20load
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
Retry \x0a\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20';});}function clearMarkers(){const _0x40290f=_0x522a;for(let _0x172f86=0x0;_0x172f860x1)_0xc2f51b=0x1;_0xc2f51b=Math[_0x3a989e(0x195)](_0xc2f51b),_0xc2f51b=_0xc2f51b*0xb4/Math['PI'],_0xc2f51b=_0xc2f51b*0x3c*1.1515;if(_0x1a420b=='K')_0xc2f51b=_0xc2f51b*1.609344;if(_0x1a420b=='N')_0xc2f51b=_0xc2f51b*0.8684;return _0xc2f51b=_0xc2f51b*1609.34,_0xc2f51b[_0x3a989e(0x18c)](0x1);}}function display_location(){const _0x4be998=_0x522a,_0x525f5a=document['getElementById'](_0x4be998(0x184));if(distance_from_guess>0x3e8)_0x525f5a[_0x4be998(0x19d)]=_0x4be998(0x1b8)+distance_from_guess+_0x4be998(0x1b2);else{if(distance_from_guess>0xc8)_0x525f5a[_0x4be998(0x19d)]='Good\x20job!\x20Your\x20distance\x20is\x20'+distance_from_guess+_0x4be998(0x1b2);else _0x525f5a[_0x4be998(0x19d)]=_0x4be998(0x193)+distance_from_guess+_0x4be998(0x1b2);}}function disableButton(_0x192b3e){const _0x1c0889=_0x522a;document[_0x1c0889(0x1b0)](_0x192b3e)['disabled']=!![];}function enableButton(_0x9b2383){const _0x366028=_0x522a;document[_0x366028(0x1b0)](_0x9b2383)[_0x366028(0x1ac)]=![];}function showResultModal(_0x6a4c37){const _0x2addc6=_0x522a,_0x282e45=document[_0x2addc6(0x1b0)]('resultModal'),_0x2868ea=document['getElementById'](_0x2addc6(0x1d9)),_0x545279=document[_0x2addc6(0x1b0)]('distance-guess');if(distance_from_guess>0x3e8)_0x545279['innerHTML']=(distance_from_guess/0x3e8)['toFixed'](0x2)+_0x2addc6(0x1e0);else _0x545279[_0x2addc6(0x19d)]=distance_from_guess+'\x20M';if(distance_from_guess>0x3e8)_0x2868ea['innerHTML']=_0x2addc6(0x1a4);else{if(distance_from_guess>0xc8)_0x2868ea[_0x2addc6(0x19d)]=_0x2addc6(0x1a7);else _0x2868ea[_0x2addc6(0x19d)]=_0x2addc6(0x19a);}_0x282e45['style'][_0x2addc6(0x18d)]=_0x2addc6(0x1da),createResultMap();}function createResultMap(){const _0x25d530=_0x522a,_0x30d8e9=document[_0x25d530(0x1b0)](_0x25d530(0x1a0));_0x30d8e9[_0x25d530(0x19d)]='';var _0x47b24a=L[_0x25d530(0x1a8)](_0x25d530(0x1a0))['setView'](true_location,0xc);L[_0x25d530(0x1d5)]('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{'maxZoom':0x13})[_0x25d530(0x19f)](_0x47b24a),setTimeout(()=>{_0x47b24a['invalidateSize']();},0x64);const _0x2ca010=L[_0x25d530(0x1c2)](true_location,{'icon':L[_0x25d530(0x1d6)]({'iconUrl':_0x25d530(0x18f),'iconSize':[0x20,0x20]})})['addTo'](_0x47b24a)[_0x25d530(0x1bf)](current_name),_0x1d678a=L[_0x25d530(0x1c2)](guess_coordinates,{'icon':L[_0x25d530(0x1d6)]({'iconUrl':_0x25d530(0x180),'iconSize':[0x20,0x20]})})[_0x25d530(0x19f)](_0x47b24a)['bindPopup']('Your\x20Guess'),_0x2f53f4=L[_0x25d530(0x196)]([true_location,guess_coordinates],{'color':_0x25d530(0x1a2),'dashArray':_0x25d530(0x188)})[_0x25d530(0x19f)](_0x47b24a),_0x28ce52=new L[(_0x25d530(0x1d1))]([_0x2ca010,_0x1d678a]);_0x47b24a[_0x25d530(0x192)](_0x28ce52[_0x25d530(0x1d4)]()[_0x25d530(0x191)](0.1));}function closeResultModal(){const _0x4b1b43=_0x522a;document[_0x4b1b43(0x1b0)]('resultModal')[_0x4b1b43(0x1e2)][_0x4b1b43(0x18d)]=_0x4b1b43(0x1e6);}function _0x4cf1(){const _0x1ef46e=['latlng','location','none','loading-styles','Fetching\x20panoramic\x20image...','https://maps.google.com/mapfiles/ms/icons/red-dot.png','href','https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png','catch','score','sin','floor','onload','5,\x2010','geometry','is_pano','url','toFixed','display','removeLayer','https://maps.google.com/mapfiles/ms/icons/green-dot.png','filter','pad','fitBounds','Excellent!\x20Your\x20distance\x20is\x20','\x22\x20style=\x22width:100%;\x20height:100%;\x20object-fit:cover;\x20border-radius:10px;\x22\x20/>','acos','polyline','Error\x20initializing\x20Photo\x20Sphere\x20Viewer:','103745uPEcCw','appendChild','Excellent!','VIET\x20NAM',' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
⚠️\x20Error\x20loading\x20image
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
Retrying...
\x0a\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20','length','disabled','panorama-loaded','Modal','552735zVtQrk','getElementById','coordinates','m\x20away.','includes','110154MjTVEi','Error\x20in\x20initialize\x20function:','warn','467704UHjPyE','Hmm!\x20Your\x20distance\x20is\x20','setView','check','reload','zoom','get','lng','bindPopup','join','Loading\x20image...','marker','hide','addEventListener','\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20\x20\x20
Loading\x20image...
\x0a\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20
\x0a\x20\x20','then','No\x20images\x20found,\x20retrying...','lat','json','Image\x20fetched\x20successfully','\x0a\x20\x20\x20\x20\x20\x20@keyframes\x20spin\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x200%\x20{\x20transform:\x20rotate(0deg);\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20100%\x20{\x20transform:\x20rotate(360deg);\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20','3521016tqZJUl','random','Error\x20loading\x20panorama:','data','Panorama\x20image\x20loaded','featureGroup','resultModal','error','getBounds','tileLayer','icon','cos','push','resultText','block','18UgWapq','PhotoSphereViewer','donateModal','https://graph.mapillary.com/images?access_token=','Viewer','\x20KM','pano','style','Photo\x20Sphere\x20Viewer\x20loaded\x20successfully'];_0x4cf1=function(){return _0x1ef46e;};return _0x4cf1();}function nextRound(){closeResultModal(),location['reload']();}function goBack(){const _0x5444ac=_0x522a;window[_0x5444ac(0x1e5)][_0x5444ac(0x181)]='/';}function showDonateModal(){const _0x5821f2=_0x522a,_0x571872=document[_0x5821f2(0x1b0)](_0x5821f2(0x1dd));_0x571872['style']['display']=_0x5821f2(0x1da);}function closeDonate(){const _0x17e200=_0x522a,_0xb32e8c=document[_0x17e200(0x1b0)](_0x17e200(0x1dd));_0xb32e8c['style']['display']=_0x17e200(0x1e6);}window[_0x2f3f3d(0x187)]=function(){const _0x447466=_0x2f3f3d,_0x4e1bcd=new URLSearchParams(window[_0x447466(0x1e5)]['search']),_0x517d2e=_0x4e1bcd[_0x447466(0x1bd)]('location');_0x517d2e&&(choiceLocation=_0x517d2e),minLat=boundingBoxVN[choiceLocation][0x1],maxLat=boundingBoxVN[choiceLocation][0x3],minLong=boundingBoxVN[choiceLocation][0x0],maxLong=boundingBoxVN[choiceLocation][0x2],delta=boundingBoxVN[choiceLocation][0x4],checkLibrariesLoaded()[_0x447466(0x1c6)](()=>{initialize();});};
\ No newline at end of file