Tuesday, May 20, 2014

Arduino on CentOS-6

I decided it was high time that I found a way to turn on my new TV automatically. After much research I decided that an arduino based IR Blaster was the way to go. I happen to have a Freetronics LeoStick which was given out a LCA in Ballarat a few years ago.

I recall at the time I could not get the arduino software to work on Linux (CentOS-5) so I resorted to using a Windows VM with USB passthru.

That was not going to cut it this time. I was going to use my full stubbornness to get it working on CentOS-6.

First of all, I had to get a copy of the IDE in RPM format. There was talk on the internet about just such a thing but I could not find an EL6 version. In the end I selected the Fedora 19 version which is suitable. The files needed are:
  • arduino-1.0.5-6.fc19.noarch.rpm
  • arduino-doc-1.0.5-6.fc19.noarch.rpm
  • arduino-core-1.0.5-6.fc19.noarch.rpm

There are also a number of other dependancies because the IDE does not actually do much. Luckily the other bits are all in CentOS-6 or EPEL so using yum you can get it installed without too much trouble.

Running the IDE however is rigged with rubbish about adding your user account to certain groups. This seems antiquated to me and I refuse to do it. There must be a better way.

An ideal solution would be that the USB devices are assigned to the console owner and it would just work like any other peripheral. The way to implement that changes with every version of RHEL/CentOS but after some sleuthing, I found the answer for version 6 and it is no too difficult.

To get this working there are four jobs:
  • Make sure the USB device ID is known to the USB TTY driver
  • Set the appropriate permissions with udev
  • Remove the restrictions on locking the device
  • Configure the IDE
The first job is not immediately obvious and may not be applicable on all versions of Linux. On CentOS-6 (6.5) is was necessary. As if by magic or just infuriating design, the USB device ID of your arduino can change depending on what it is doing. This can be exploited for good, say if you wanted to build a USB keyboard or mouse but if you are using the default serial emulation then it seems unnecessary. For me, the default id used by the boot loader (26ba:0002) is automatically recognised as a serial device and /dev/ttyACM0 is created (by the cdc_acm driver) but when my sketch is running, the id (26ba:8002) is not recognised. This means the device goes away which confuses the arduino tools (and me). This is easily fixed by running this command as root:
echo "0x26ba 0x8002" >> /sys/bus/usb/drivers/cdc_acm/new_id
For your board, the IDs may well be different so you much check with dmesg or lsusb.

This needs to be done after every reboot so it should be added to an init script
modprobe cdc_acm
echo "0x26ba 0x8002" >> /sys/bus/usb/drivers/cdc_acm/new_id
TODO: is there is proper place for this? modprobe.conf? /etc/sysconfig/modules/arduino? For now, /etc/rc.d/rc.local will do.
Device permissions on CentOS-6 are managed by udev. Most devices use the traditional user, group and permissions. However, devices which are shared (for example, with console users) are managed using ACLs. (check with ls -l /dev/ | grep +).

In order to set the permissions, the correct devices must be identified. For me, the device name is /dev/ttyACM0 but this does not hang round for long (remember about the changing ids?). It is only present while the arduino bootloader is running. dmesg can give you a hint but the easiest way to check the device name is the plug in the stick and immediately run ls -l /dev/tty*

Once you know the device name you can interigate it with udev
udevadm info -a -n /dev/ttyACM0
Again you must run this immediatly after plugging in the USB stick.
It will output many properties of the device from which you must find something unique. At first I though that 'ATTRS{manufacturer}=="Freetronics"' was a good value to check for but it turns out that when your sketch is running, that string is not present. Better is to use the USB vendor ID 'ATTRS{idVendor}=="26ba"'.  While I was at it, I also added the Arduino vendor code of 20a0. I could then make a new udev rule by creating the file:
/etc/udev/rules.d/52-arduino.rules
and adding the contents:
ATTRS{idVendor}=="26ba", ENV{ACL_MANAGE}="1"ATTRS{idVendor}=="20a0", ENV{ACL_MANAGE}="1"

Some sources also recommend preventing the Modem Manager from probing the device. You can do that by adding this line too

ATTRS{idVendor}=="26ba", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="20a0", ENV{ID_MM_DEVICE_IGNORE}="1"

Once the file is in place, you can force the rules to be applies with the command
udevadm trigger

Now check the device with ls -l again (immediately after plugging in the stick) and it should look like this (with a + sign)
crw-rw----+ 1 root dialout 166, 0 Apr 24 23:08 /dev/ttyACM0

If so, check the ACL with  getfacl /dev/ttyACM0
getfacl: Removing leading '/' from absolute path names
# file: dev/ttyACM0
# owner: root
# group: dialout
user::rw-
user:jnewbigin:rw-
group::rw-
mask::rw-
other::---


Note that my username jnewbigin is granted access. You should of course see your username there. If so, job done.

The next headache is device locking. The default rxtx library wants to write to a directory it does not have permissions on. Fixing this was painful. All I wanted was a simple way to skip the locking phase in the rxtx library. I had hoped that there would be an environment variable which could tune the locking. According to the documentation, the only way to turn locking off is by recompiling. Luckily the srpm is easily modified. You can download my lock free version of rxtx from http://www.chrysocome.net/download

Almost done. I would have though that configuring the IDE should not be required but as it happens, you must edit ~/.arduino/preferences.txt and change
serial.port=/dev/ttyACM0

So now we have removed the requirements to add your user into the unnecessary groups. The script which runs the IDE (arduino) however still complains that you are not a member. The best solution would be to rebuild the rpm without that check (and add in the udev rules) but for now you can either select Ignore or edit /usr/bin/arduino and change the line
for group in dialout lock; do
to
for group in ; do

Perhaps I will repackage it with these changes.


And stay tuned for the working IR blaster code!

149 comments:

  1. I regularly visit your site and find a lot of interesting information. Not only good posts but also great comments. Thank you and look forward to your page growing stronger gmail login

    ReplyDelete
  2. Thank you for your post, I look for such article along time, today i find it finally. this post give me lots of advise it is very useful for me

    outlook entrar

    ReplyDelete
  3. Wow amazing its looking great. Thanks for sharing I will try.
    I really want to try this. Mcafee Activate

    ReplyDelete
  4. It's a very Informative post to us. I bookmarked this post for your future reference. I have never felt so good. McAfee.com/activate

    ReplyDelete
  5. Mcafee offers an advanced security solution for users. and if you have any issues regarding the McAfee, You can visit our official website. McAfee Support

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete
  7. Good post. I learn something totally new and challenging on blogs Quickbooks online support

    ReplyDelete

  8. Thanks for such a good articles it really helped me after reading your posts. McAfee setup

    ReplyDelete
  9. this is the best informative and usefull blog for me about linux.linus is the bestest networking software standard deviation formula thank you so much for sharing this with us

    ReplyDelete
  10. When your website or blog first appears, it's interesting. That is until you realize no one but you and you. Play room clicker clickerheroes.games game

    ReplyDelete
  11. If you have good quality images and that you want to convert JPG to PDF it is very easy to convert. Use our online jpg to pdf converter, so you can convert any image with the help of the type of PDFs with ease.
    how to convert jpg to pdf

    ReplyDelete
  12. The most exact python scientific notation has no prescience that somewhat incalculable may not balk the very next moment.

    ReplyDelete
  13. I will carefully read the issues you just shared, I find there are some places that are not very clear visit here

    ReplyDelete
  14. Mr Thorneycroft, 43, doused deadly embers while 20 women and children sheltered in the Kinglake National Park Hotel coolroom with their pets.
    https://mostpopularwomen.info/

    ReplyDelete
  15. I have also now made the track available for download in either WMA or MP3 format. Mp3 Rocket Torrent

    ReplyDelete
  16. I wanted to thank you for this informative analysis of the Subway Surfers online game. I definitely savored every little bit of it and I submitted your site to some of the biggest social networks so others can find your blog.

    ReplyDelete
  17. Install Arduino IDE 1.8.2 on Linux. By patrickthecreator in CircuitsLinux. 55,570. 14. 6. license.

    source

    ReplyDelete
  18. This post is discussing in an outstanding way. I like your way yo discussed your valid points and facts about this. McAfee Activate

    ReplyDelete
  19. I really said one thing is you share your personal knowledge with us that was the great thing. I really appreciate this thing. windows audio device graph isolation

    ReplyDelete
  20. is the best digital marketing company in Delhi NCR. we are giving our services like a digital marketing agency, SEO company, and Best graphic designing services in Delhi NCR, Best SMM Serc in all over Delhi, SEO services in Delhi Faridabad Noida, and Gurgaon. Best SMM Services in delhi

    ReplyDelete
  21. You topic is very great and useful for me…thank you
    click on here

    ReplyDelete
  22. Aqui tienen si les interesa plantillas gratis para decargar

    curriculum vitaes y pueden editarlos ustedes mismos , los

    invito a pasar por mi web sobre plantillas y curriculums vitae

    gratuitos para bajar cv
    Espero haber aportado a la comunidad!

    ReplyDelete
  23. Wow! thanks for this good innfo

    ReplyDelete
  24. This day is always celebrates on the 1st date of every year and all countries are enjoy this day on same date. Day is different is each year but the date is same on each year. Use these images, that we have already share with you and your friends on coming holiday. Must download advance Happy New Year Status 2021 images with quotes for your friends and family members.

    ReplyDelete
  25. Great work man you have post a great post it will help people very much keep it do more for people like that.

    카지노사이트
    먹튀검증
    스포츠토토
    토토사이트

    ReplyDelete
  26. It was really good work. I really like your thoughts. I personally appreciates for your work. your article is very impressive and helpful for us. .. Thanks

    사설토토
    바카라사이트
    파워볼

    ReplyDelete
  27. something that is remarkable and should be learned. Thank you for providing this great information

    토토
    온라인카지노
    파워볼사이트

    ReplyDelete
  28. I must say you have written a great article. The way you have described everything is phenomenal. If you have time, please visit my site 파워볼 하는법

    ReplyDelete
  29. Article writing is also a fun, if you know then you can write otherwise it is complex to write.Look at my site 파친코

    ReplyDelete
  30. Thanks designed for sharing such a pleasant thinking, piece of writing is good, thats why i have read it entirely 휴게텔

    ReplyDelete
  31. 카지노사이트 Nice post. I was checking constantly this weblog and I’m inspired!

    Very helpful info particularly the remaining section 🙂 I maintain such info a lot.
    I used to be looking for this particular information for a very long time.
    Thank you and good luck.

    ReplyDelete
  32. 온라인카지노 Wow, fantastic blog layout! How long have you been blogging for?
    you make blogging look easy. The overall look of your site
    is wonderful, let alone the content!

    ReplyDelete
  33. My programmer is trying to convince me to move to .net from 메이저놀이터. I have always disliked the idea because of the expenses. But he's tryiong none the less.

    ReplyDelete
  34. It’s awesome to pay a visit this web page and reading the views of all colleagues concerning
    this piece of writing, while I am also zealous of getting knowledge. 경마

    ReplyDelete
  35. I need to to thank you for this fantastic read!! I definitely loved every little bit of it. I’ve got you saved as a favorite to look at new stuff you post… 바카라사이트

    ReplyDelete
  36. I got a web site from where I be capable of really obtain valuable information regarding my study and knowledge.
    Great Article… Good Job… Thanks For Sharing…바둑이사이트

    ReplyDelete
  37. After looking into a few of the blog posts on your site, I seriously appreciate your way of blogging 카지노사이트

    ReplyDelete
  38. Hey there, You’ve done an excellent job. I will definitely digg it and personally suggest to my friends. I’m confident they will be benefited from this website.카지노사이트

    ReplyDelete
  39. Good post, thanks for sharing.. very useful for me, I will bookmark this for my future needs. I would like to thank you for the efforts you have made in writing this article and I am hoping the same best work from you in the future as well. 경마

    ReplyDelete
  40. This is also a very good post which I really enjoyed reading. It is not every day that I have the possibility to see something like this. 대딸방

    ReplyDelete
  41. So it is interesting and very good written and see what they think about other people. Very good topic, similar texts are I do not know if they are as good as your work out. 바카라사이트

    ReplyDelete
  42. Having read this I believed it was extremely enlightening. I appreciate you spending some time and effort to put this short article together. 토토사이트

    ReplyDelete
  43. Yes i am totally agreed with this article and i just want to say that this article is very nice and very informative. 경마사이트

    ReplyDelete
  44. Thank you for sharing your article and I hope you will share some more information about this.. keep sharing! 토토사이트

    ReplyDelete
  45. I am interested in this area if you are a great site but know some community forums. I think it should be a good opportunity to get feedback from others who are experienced. 온라인섯다

    ReplyDelete
  46. Thanks for sharing excellent informations. Your web-site is very cool. I’m impressed by the details that you have on this site. It reveals how nicely you understand this subject. Bookmarked this web page, will come back for more articles. You, my pal, ROCK! I found simply the information I already searched all over the place and simply couldn’t come across. What a great web-site.

    스포츠토토

    ReplyDelete
  47. Useful information. Lucky me I found your web site by chance, and I’m shocked
    why this coincidence did not took place earlier! I bookmarked it.
    바카라

    ReplyDelete
  48. Hi there to all, because I am truly eager of reading this blog’s post to be updated regularly.

    It carries good data.

    바카라사이트

    ReplyDelete
  49. I've proper selected to build a blog, which I hold been deficient to do for a during. Acknowledges for this inform, it's really serviceable!온라인바둑이

    ReplyDelete
  50. Looking forward to reading more. Great article.Really thank you! Will read on온라인카지노

    ReplyDelete
  51. The website style is great, the articles is really excellent 온라인카지노

    ReplyDelete
  52. Well done information.thanks for the excellent article. 온라인카지노

    ReplyDelete
  53. 바카라사이트 Believe in yourself and make it happen. Wishing you all the best! I’m pretty confident that you’ll do well.

    ReplyDelete
  54. 카지노사이트 Now you’ve figured it out, that’s really nice work! It looks like you’ve put a lot of work into this.

    ReplyDelete
  55. 샌즈카지노 You certainly did well today. That’s an interesting way of looking at it, I’ve never seen anyone do it better.

    ReplyDelete
  56. I hope you also visit my blog and give us a good opinion.온라인카지노

    ReplyDelete
  57. 카지노사이트
    Seriously love your blog.Visit my link as well..

    ReplyDelete
  58. Hey There. I found your blog using msn. This is a very well written article. I’ll be sure to bookmark it and come back to read more of your useful info. Thanks for the post. I’ll definitely return. 안전놀이터

    ReplyDelete
  59. Papers get to operate through Bible helpers and also plagiarism checkers to be certain that the author did not find idle at any stage in the process. Language inconsistencies won't be a thing with your newspapers as the specialists of our school paper writing support are passionate about writing and are always excited to strike you with something fresh. By: 안전놀이터

    ReplyDelete
  60. Wow, What an Outstanding post. I found this too much informatics. It is what I was seeking for. I would like to recommend you that please keep sharing such type of info.If possible, Thanks. 안전놀이터

    ReplyDelete
  61. Very well written information. It will be beneficial to anybody who utilizes it, including me. Keep doing what you are doing – for sure i will check out more posts. ufa slot

    ReplyDelete
  62. It’s very excellent information and more real facts to provided that post. Thank you for sharing this information.
    카지노사이트윈

    ReplyDelete
  63. Thanks for posting this educative writeup. I really like your means of blogging.
    온카지노사이트인포

    ReplyDelete
  64. Keep up the good work , I read few blog posts on this website and I believe that your weblog is rattling interesting. Thank you for this effort, I will give you 5 stars for this. Kindly check the link below Thank you!
    토토사이트핫

    ReplyDelete
  65. I don't think I've seen so many wonderful writings in my life, but today is the best day.먹튀검증사이트

    ReplyDelete
  66. That’s why marketing and advertising that you simply applicable exploration previous to publishing. 야동비즈

    ReplyDelete
  67. If more people that write articles really concerned themselves with writing great content like you, more readers would be interested in their writings. Thank you for caring about your content. 야동

    ReplyDelete
  68. you have done a great job. I will definitely dig it and personally recommend to my friends. I am confident they will be benefited from this site 일본야동닷컴

    ReplyDelete
  69. Wow! After all I got a web site from where I can actually get valuable information regarding my study and knowledge. 중국야동넷

    ReplyDelete
  70. Wow, happy to see this awesome post. I hope this think help any newbie for their awesome work. By the way thanks for share this awesomeness from
    온라인카지노

    ReplyDelete
  71. I’ve a project that I am just now working on, and I have been on the look out for such information.
    텍사스홀덤사이트

    ReplyDelete
  72. This comment has been removed by the author.

    ReplyDelete
  73. Nice article I agree with this.Your blog really nice. Its sound really good
    Support my website: 파칭코사이트인포

    ReplyDelete
  74. 슬롯머신777사이트
    Hard to ignore such an amazing article like this. You really amazed me with your writing talent. Thank for you shared again.

    ReplyDelete
  75. Fantastic work! This really can be the kind of data which needs to really be shared round the internet. Shame on Google for perhaps not placement this specific informative article much higher!

    Click here: 블랙잭사이트

    ReplyDelete
  76. I certainly appreciate this site. Thank you so much for this article, it saved me time! 야한동영상

    ReplyDelete
  77. This is just the information I am finding everywhere. Thanks for your blog, I just subscribe your blog. This is a nice blog. 야동

    ReplyDelete
  78. We all need to see this kind of information, and we really hope that this article will spread widely.메이저사이트 May the good things always be full.

    ReplyDelete
  79. It's been a while since I've read this heart-throbbing post.토토사이트 I look forward to your kind cooperation.

    ReplyDelete
  80. Hello, i think that i saw you visited my site this i came to “return the favor”.I am trying to find things to
    enhance my web site!I suppose its ok to use a few of your ideas!!

    포커게임

    ReplyDelete
  81. Everyone an extremely breathtaking chance to read from this blog.
    It is always so lovely and jam-packed with a great time.
    슬롯머신

    ReplyDelete
  82. Excellent blog you’ve got here.. It’s difficult to find premium quality writing like yours these days.
    토토사이트웹
    I seriously appreciate people just like you! Be cautious!!

    ReplyDelete
  83. To an extraordinary degree beautiful and enthralling post. I was chasing down this sort of data and recognized inspecting this one. Continue posting. Grateful for sharing.
    안전놀이터 모음

    ReplyDelete
  84. Kingdomtoto adalah situs togel online yang terbaik dan bonafit yang merupakan anak cabang dari Kingdom Group. Permainan Togel Online ini sangat booming di Indonesia sehingga Kingdomtoto juga ikut hadir untuk menaungi setiap member togel online. Selain itu Kingdomtoto juga berperan sebagai Agen toto terbesar yang ada di Indonesia, agar mengurangi oknum oknum lain yang ingin menipu anda. kingdomtoto

    ReplyDelete
  85. Glad to chat your blog, I seem to be forward to more reliable articles and I think we all wish to thank so many good articles, blog to share with us 한국야동

    ReplyDelete
  86. Hi! This is my first visit to your blog! We are a team of volunteers and new initiatives in the same niche. Blog gave us useful information to work. You have done an amazing job! 야동

    ReplyDelete

  87. wow, great, I was wondering how to cure acne naturally. and found your site by google, learned a lot, now i’m a bit clear. I’ve bookmark your site and also add rss. keep us updated. 국산야동

    ReplyDelete
  88. There are several different ways in which people can make money online these days. 토토사이트

    ReplyDelete
  89. Your blog was incredible, I'm glad that i found. I love to read such an excellent article. Thanks! It has made my 토토사이트

    ReplyDelete
  90. Thanks so much for sharing all of the awesome info! I am looking forward to checking out more 토토사이트

    ReplyDelete
  91. Having read this I believed it was extremely informative. I appreciate you finding the time and energy to put this content together. 온라인경마

    ReplyDelete
  92. This is such a great resource that you are providing and you give it away for free. I love seeing blog that understand the value of providing a quality resource for free. 릴게임

    ReplyDelete
  93. Wonderful website. Plenty of helpful information here. I?¦m sending it to a few buddies ans also sharing in delicious. 토토사이트

    ReplyDelete
  94. Plz answer back as I’m looking to construct Wow, great blog article 토토사이트

    ReplyDelete
  95. but I believe it will help a lot in my country 토토사이트 Thank you. I'll be back every time

    ReplyDelete
  96. 토토사이트 We are linking to this great post on our website That's a really good piece of data. Amazing

    ReplyDelete
  97. Outstanding arguments. Keep up the great spirit.바카라사이트

    ReplyDelete
  98. Finally I got a website from where I be capable
    of truly take helpful facts regarding my study and knowledge.카지노사이트

    ReplyDelete
  99. Your article is very informative and helpful to me. Thank you for the post it’s really nice.this is more good! do visit my site here.
    카지노사이트

    ReplyDelete
  100. Nice post. I learn something new and challenging on blogs I stumbleupon on a daily basis.
    It’s always interesting to read articles from other authors and practice
    something from their web sites.
    카지노사이트

    ReplyDelete
  101. Wonderful article! That is the kind of information that are
    meant to be shared around the net. Disgrace on the seek engines for not positioning this publish upper!
    Come on over and talk over with my site . Thank you =)
    토토

    ReplyDelete
  102. I can not think this is taking place to me. I really did not anticipate to go to such a fantastic blog site. Your blog post is extremely well arranged. Each time I see such a best blog post, I get a bang out of it. I thanks for providing me an important experience. I wish you are constantly pleased and also healthy and balanced. 바카라사이트

    ReplyDelete
  103. Our things are made using 100% normally created cannabis, sourced clearly from trusted in farms in our total association. Using sub-essential liquid carbon dioxide, we eliminate a fine quality oil and refine it using just warmth and squeezing factor. Rove Haze

    ReplyDelete
  104. Its like you read my mind! You seem to know a lot about this, like you wrote the book in it or something. I think that you could do with a few pics to drive the message home a bit, but other than that, this is magnificent blog. A fantastic read. I’ll certainly be back. จีคลับ

    ReplyDelete

  105. Exactly what i was looking for. Very well described thanks. Looking forward to return
    again. If you want to watch Bigg boss 15 visit here all hd episodes for free.
    bigg boss 15 full episode
    bigg boss 15 watch online
    bigg boss 15 mx player

    ReplyDelete
  106. Thank you for another fantastic blog. Where else might one get that sort of knowledge written in such a perfect way? I actually have a presentation that I’m presently acting on, and i are yearning for such info instead.
    스포츠토토

    ReplyDelete
  107. I am really impressed with your writing abilities as smartly with the format on your weblog. Is this a paid subject or did you modify it yourself? Either way stay up the excellent quality writing, it is rare to peer a nice blog like this one nowadays.
    한국야동

    ReplyDelete
  108. Always i used to read smaller articles or reviews that also clear their motive, and that is also happening with this paragraph which I am reading here.
    부산오피

    ReplyDelete
  109. An individual's kitchen needs a general cleaning each night after supper. For any deep maintenance, you need to focus on the great appliances, and even all house surfaces. Below are some items designed to need exceptional attention: Refrigerator - Starting on the top menu, take all the things out, cleaning every one shelf as you may go. Should a shelf is certainly removable, take it out and nice and clean it utilizing warm soapy standard water. Most drawers are removable and may also get washed like this. cleaning services in dubai

    ReplyDelete
  110. I was impressed by your writing. Your writing is impressive. I want to write like you.안전놀이터 I hope you can read my post and let me know what to modify. My writing is in I would like you to visit my blog.


    ReplyDelete
  111. You made some good points there. I did a Google search about the topic and found most people will believe your blog. 먹튀검증

    ReplyDelete
  112. That's a really impressive new idea! 메이저토토사이트추천 It touched me a lot. I would love to hear your opinion on my site. Please come to the site I run once and leave a comment. Thank you.


    ReplyDelete
  113. You actually make it seem really easy with your presentation but I find this matter to be actually something that I believe I’d never understand. 카지노

    ReplyDelete
  114. I accidentally visited another hyperlink. I still saw several posts while visiting, but the text was neat and easy to read.
    안전놀이터

    ReplyDelete
  115. What a post I've been looking for! I'm very happy to finally read this post. 토토사이트 Thank you very much. Can I refer to your post on my website? Your post touched me a lot and helped me a lot. If you have any questions, please visit my site and read what kind of posts I am posting. I am sure it will be interesting.


    ReplyDelete
  116. 바카라사이트 Pretty! This was an extremely wonderful article. Thanks for
    supplying this info.

    ReplyDelete
  117. Hello, I read the post well. casino online It's a really interesting topic and it has helped me a lot. In fact, I also run a website with similar content to your posting. Please visit once


    ReplyDelete
  118. Hello, I am one of the most impressed people in your article. 우리카지노 What you wrote was very helpful to me. Thank you. Actually, I run a site similar to you. If you have time, could you visit my site? Please leave your comments after reading what I wrote. If you do so, I will actively reflect your opinion. I think it will be a great help to run my site. Have a good day.


    ReplyDelete
  119. How To Deal Cards In 모바일바둑이 현금바둑이게임 온라인현금바둑이

    ReplyDelete
  120. Your blog post is very impressive, I almost read all the articles you wrote. Contains a lot of useful information.
    바카라사이트

    ReplyDelete
  121. Thank you for this wonderful post! It has long been extremely helpful. 메이저사이트I wish that you will carry on posting your knowledge with us.


    ReplyDelete
  122. That's a really impressive new idea! casino api It touched me a lot. I would love to hear your opinion on my site. Please come to the site I run once and leave a comment. Thank you.


    ReplyDelete
  123. Thank you again for all the knowledge you distribute,Good post. I was very interested in the article, it's quite inspiring I should admit. I like visiting you site since I always come across interesting articles like this one.Great Job, I greatly appreciate that.Do Keep sharing! Regards. ufabet1668

    ReplyDelete
  124. I think your site might be having browser compatibility issues. When I look at your website in Safari, it looks fine but when opening in Internet Explorer, it has some overlapping. I just wanted to give you a quick heads up! Other then that, terrific blog! แอพสล็อต ได้เงินจริง

    ReplyDelete
  125. Thank you for your information, i hope you will make more great content like this in the future
    ลิงค์รับทรัพย์ pragmaticplay slot

    ReplyDelete
  126. Thanks for providing such a great article, This article is very help full for me, a lot of Thanks.ทางเข้า igoal

    ReplyDelete
  127. Greate pieces. Keep writing such kind of information on your blog.

    Im really impressed by your site. Hi there, You have performed an excellent job. I’ll
    definitely digg it and for my part suggest to my friends. I am sure they’ll be benefited from this website.

    Dvo.com
    Baseballthinkfactory.org
    Pubmiddleware.mims.com
    Afpc.org

    ReplyDelete
  128. Whoah this blog is fantastic i really like studying your posts. Keep up the great work! You understand, many persons are searching around for this info, you could help them greatly.

    Es.catholic.net
    Onlinemanuals.txdot.gov
    Redirect.camfrog.com
    Interempresas.net

    ReplyDelete
  129. Extremely pleasant and fascinating post. Continue posting. We're waiting

    ReplyDelete
  130. I really like your post, I always like to read quality content and you have one

    ReplyDelete
  131. This is an extremely well written article.

    ReplyDelete
  132. Your blog is excellent. Very well-written and informative. Click Here

    ReplyDelete